Open fish519 opened 5 years ago
【变量声明】
使用let和const,不使用var var,作用域问题,变量提升等
解构 数组解构,对象解构
函数声明 解构也能用于函数声明 type C = { a: string, b?: number} function f({ a , b } : C): void { // ... }
【接口】
使用接口去检查类型(只要传入的对象属性满足接口的必要条件就可以了) interface LabeledValue { label: string } function printLabel(labelObj: LabeledValue) { console.log(labeledObj.label); }
接口的可选属性(属性后面加个问号) interface SquareConfig { color?: string; width?: number; }
接口的只读属性
interface Point{
readonly x:number;
readonly y:number;
}
不可变的数组
let a: number[] = [1,2,3,4];
let ro: readonlyArray
额外的属性检查
接口的函数类型(接口可以描述函数类型) interface SearchFunc { (source: string, subString: string): boolean; }
接口的可索引类型(具有索引签名,描述了对象索引的类型,还有相应的索引返回值类型) interface StringArray{
}
类类型(能够用接口来明确的强制一个类去符合某种契约) interface ClockInterface { currentTime: Date; } class Clock implements ClockInterface { currentTime: Date = new Date(); contructor(h: number, m: number) {} }
类静态部分与实例部分的区别(???)
继承接口(继承接口,实现接口的时候也会实现父接口,还可以继承多个接口,创建合成接口) interface A{a: string} interface B extends A{b: string} let test = {}; test.a = 'a'; test.b = 'b';
混合类型
接口继承类(接口继承类A,A拥有私密或者保护成员,接口只能由A或者A的子类实现)
【基础类型】
变量后面添加冒号,再跟着元素类型 let isDone: boolean = false let decLiteral: number = 6 let name:string = "fish" let list:number[] = [1,2,3]
使用范形(尖括号) let list: Array = [1,2,3]
元祖,可以表示已知元素数量和类型的数组 let x: [string, numer]
枚举(可以通过枚举的值得到名字) enum Color { Red, Green, Blue}
任意值(和object的区别) let list: any[] = [1, true, 'free']
空值 void,和any类型相反 通常用于函数返回值为空 function test(): void{ console.log('test') }
Null和Undefined
Never 永不存在的值的类型(抛异常的时候用?)
Object 非原始类型
类型断言(使用jsx的时候只有as语法断言是被允许的) 1、尖括号语法 2、as语法