接着上个文章,上个文章讲了number,string,boolean
1.字面量类型
1.1. 可以直接使用字面量进行类型声明
let a: 10; // 就是代表a的值就是10
a = 10;
a = 20; // error
1.2.可以使用 | 来连接多个类型,这个是或的意思(联合类型)
let b = "boy" | "girl" // 就代表b的值就为boy或girl
b = "boy"
b = "girl"
b = "zzz" // error
也可以直接指定类型
let c: "boolean" | "string"
c = true;
c = "zzz"
就代表只要c为布尔型或者字符串型就不会报错
2. any类型
any 表示的是任意类型,一个变量设置为any后,相当于对该变量关闭了TS的类型检测
这样就跟js一样了,都不会进行类型检测,所以开发中一般不使用
any 表示的是任意类型,一个变量设置为any后,相当于对该变量关闭了TS的类型检测
let d: any;
d = 10;
d = 'hello';
d = true;
上面的代码都不报错,可以是任意类型的
还有需要注意的是,下面的也是any,是隐式any,要避免
let d; // 就等于 let d: any;
上面的隐式any要注意
3.unkonwn
表示未知类型的值,可以说是安全类型的any
let d: any;
let s = string;
s = d; // 不会报错, d的类型是any,它可以赋值给任意变量
上面的 s = d 不报错,因此这种写法不推荐。所以就出现了unkonwn类型,这种类型就会报错。
let e: unknown;
e = 10;
let s:string;
s = e; // error,提示e的类型为unknown,s的类型为string,所以报错
类型断言,可以用来告诉解析器变量的实际类型
let s: string;
let e: unknown;
// 下面的两种方法都可以进行类型断言
s = e as string;
s = <string>e;
// 就是提示e为string类型,并且不再报错
4.void和never
void用来表示空,以函数为例,就表示没有返回值的函数,下面代码演示
function fn(): void{
return 123; //error,这里返回了值,所以报错
}
function fn(): void{
return; // 这样不报错
}
function fn(): void{
return null; //null也不会报错
}
function fn(): void{
return undefined; // undefined也不会报错
}
但是never和void不一样,表示永远不会返回值,上面void的那几种情况把类型改为never都会报错,就是要不能返回任何东西,空的也不行
function fn(): never {
throw new Error('出错了!')
}
// 只有这种情况可以使用never