/***
* ts基础类型
* boolean number string array tuple enum any unknown void null undefined never object
*/
let bool:boolean = false //布尔
let num:number = 123
let str:string = 'Hi'
let arr1:number[] = [1,23,4] //数组定义方法1
let arr2:Array<string> = ['hah','ou']//数组定义方法2
// tuple 元组 【表示一个已知元素数量和类型的数组 】
let tup:[number,string]
tup = [1,'数量和类型必须和定义的表示一致']
console.log(tup[0],"元组的打印");
// 元组是允许越界定义的:当访问一个越界的元素,会使用联合类型替代
// tup[4] = 'wowowo'
// console.log(tup[4],"--元组越界");
// tup[3] = false //ERROR 布尔值不在之前定义的类型中
// eum 枚举类型
enum Color {
red,green,blue
}
console.log(Color.red,":枚举类型");
console.log(Color[0],":枚举类型");
// 可以手动给枚举类型赋值序号
enum Color2 {
red=0,green = 5,blue
}
console.log(Color2,"给color2赋值");
// any表示任意类型,定义一个不确定类型的变量
let a:any
a='你好'
a=123
// 定义内容为any类型数组
let arr3:any[] = ['nihao',11111,false]
// 定义内容为any类型的元组
let tup1:[any] =['hahah']
tup1[0] = 1 //可以随意修改元组/数组内容类型
tup1[0] = false
// unknown 所有类型都可以分配给unknown
let k:unknown = "nihao"
// let s:string = k //不能将类型“unknown”分配给类型“string”
// 区别1:unknown类型不能作为子类型只能作为父类型 any可以作为父类型和子类型
// 区别2:如果是any类型在对象没有这个属性的时候还在获取是不会报错的
let obj:any = {aa:1}
obj.bb //不会报错
let obj1:unknown = {aa:123}
// obj1.bb //报错
// 区别3:如果是unknow 是不能调用属性和方法
let obj2:unknown = {aa:12,bb:():number=>123}
// obj2.aa //“obj2”的类型为“未知”
// obj2.bb() // “obj2”的类型为“未知”
// Void 和any相反,表示没有任何类型,比如在一个没有返回值的函数:
function consoleWarn(txt:string):void{
console.warn("警告:",txt)
}
consoleWarn('这是一个没有返回值的函数')
let v:void
// v = 'nihao' //错误
// void类型只能赋值null和undefined
// v=null
v= undefined
// Null 和 Undefined
// ts中null和undefined都有自己的类型 null 和 undefined
// 默认情况下null和undefined是所有类型的子类型,意思是可以把该类型赋值给number类型的变量
// 注意【当ts配置中--strictNullChecks标记是开启的,那null和undefined只能赋值给void和它们各自】
// never类型 表示永远不存在的值,例如死循环、抛出异常
function error(params:string):never {
throw new Error(params)
}
// 推断的返回值类型为never function fail(): never
function fail() {
return error("Something failed");
}
// 返回never的函数必须存在无法达到的终点
function infiniteLoop(): never {
while (true) {
}
}
// object表示非原始类型
/**
* TODO:总结
* 类型的等级
* 1:any和unknown是ts的顶级类型
* 2:object
* 3:Number,String... 大写的类型
* 4:number、string...
* 5:never
*
* 不能给never类型赋值任何类型
*
*
* any和unknown区别
* 1-unknown不能作为子类型赋值、any可以做子类型也可以做父类型
* 2-any定义对象,引用对象上没有的属性时不会报错,unknown会报错
* 3-unknown定义对象,不能引用对象的属性和方法
*
*/
TypeScript学习-基础类型
于 2023-02-13 11:03:50 首次发布
本文介绍了TypeScript的基本类型,包括布尔、数字、字符串、数组、元组、枚举、any、unknown、void、null、undefined以及never。强调了any和unknown的区别,以及void和never的特殊用法。还讨论了类型等级和它们之间的关系。
摘要由CSDN通过智能技术生成