这是我参与「第五届青训营 」伴学笔记创作活动的第 14 天
typescript补充类型
any和unkown:
- any:
- 表示任意类型,一个变量设置为any后相当于关闭了TS的类型检测。使用TS时,不建议使用any类型。
- 声明变量不指定类型,则TS解析器会自动判断变量的类型为any(隐式any)
- unknown :
- unknown 实际上是一个类型安全的any;
- unknown 类型的变量,不能直接赋值给其他变量
函数返回值类型void和never
- void 用来表示空,函数无返回值;也是函数返回值默认类型。
- never 表示永远不会返回结果;不能是任何值;空也不行
typescript泛型
在定义函数或类时,如果遇到类型不确定就可以使用泛型。函数返回值类型在执行时才能确定。
function fn<T>(a:T){
return a;
}
// 可以直接调用具有泛型的函数
let result1 = fn(10);//不指定泛型,TS可以自动对类型进行推断
let result2 = fn<string>('hello');//指定泛型
function fn2<T,K>(a:T,b:K):T{
console.log(b);
return a;
}
fn2<number,string>(123,'hello');
interface Inter{
length:number;
}
function fn3<T extends Inter>(a:T):number{
return a.length;
}
fn3('123');
class MyClass<T>{
name:T;
constructor(name:T){
this.name = name;
}
}
const mc = new MyClass('xxx');
两个高级语法:
类型别名&类型断言
字符串/数字 字面量
高级类型
联合/交叉类型
- 联合类型: IA|IB;表示一个值可以是几种类型之一
- 交叉类型: IA&IB;多种类型叠加到一起成为一种类型,它包含了所需的所有类型的特性
如上例子,bookList都有公共属性author ,我们可以将它这样封装
类型保护与类型守卫
- 访问联合类型时,出于程序安全,只能访问联合类型中的交集部分
- 类型守卫:定义一个函数,它的返回值是一个类型谓词,生效范围为子作用域
但是在这些场景中,这样写是十分麻烦的,不过不用担心,typescript中有instance类型保护关键字,帮我们解决这个问题
工程应用
浏览器并不是直接用typescript的代码,而是通过TSC编译后转换成js代码来运行。