
No more than code.
TypeScript 最主要的亮点是它的类型系统,这使得在编写代码的时候就能够检测到一些错误进行提示,还能在你使用某个数据的时候,为你列出这个数据可以访问的属性和方法。而 JavaScript 是一门动态脚本语言,它不需要编译成二进制代码运行。JavaScript 的所有调试都需要在运行时才能进行,在编写代码的时候很多问题是无法提前知晓的,只有运行时才能发现错误。
TypeScript 在实现新特性的同时,时刻保持对ES标准的对齐。一些ECMAScript标准没有确定的内容,在 TypeScript 中已经率先支持了
8个js中有的类型:布尔类型、数值类型、字符串类型、数组、null/undefined、object、symbol 6个ts补充的类型:元组、枚举、Any、void、never、unknown、 高级类型:交叉类型、联合类型
number 和 Number 的区别:TS 中指定类型的时候要用 number,这个是 TypeScript 的类型关键字。而 Number 为 JavaScript 的原生构造函数,用它来创建数值类型的值。
T extends U ? X : Y
:如果 T 可以赋值给 U 类型,则是 X 类型,否则是 Y 类型
type Type<T> = T extends string ? string : number
let index: Type<'a'> // index的类型为string
let index2: Type<false> // index2的类型为number
条件类型约束
泛型约束:type MessageOf<T extends { message: unknown }> = T["message"];
如果我们想 MessageOf 支持任何类型,我们可以通过将约束和条件类型一起使用:
type MessageOf<T> = T extends { message: unknown } ? T["message"] : never;
ReturnType:获取函数返回值的类型
function getUser() {
return {name: 'xxx', age: 10}
}
type GetUserType = typeof getUser;
type ReturnUser = ReturnType<GetUserType>
在命名空间里,有时我们并不是把所有内容都对外部可见,对于没有导出的内容,在其它同名命名空间内是无法访问的