什么是ts 1
关键字
超集 es5/6规范 语法扩展
基本类型 1
关键字
元组Tuple,枚举, void, any, never
any:
有any关键字:接近js 可访问任意的属性 方法
无any关键字(默认赋值):类型推论
无any关键字(默认不赋值):等价any
void: 无结果 函数 null undefined
never: 任意类型的子类 函数 error 死循环
联合类型
关键字
| 类型的并集 属性和方法的交集 基于联合的类型推论
接口 interface
什么是接口
行为抽象-类 形状描述-对象
关键字
首字母大写不强制
对象:
可选属性: ?
任意属性: 中括号 propName 联合 [propName: string]: string | number 只能定义一个 任意属性的类型为string时所有属性都必须是它的子集
只读属性readonly:第一次对象赋值,不是属性赋值
类:
实现类的属性和方法 impletments 多个用逗号隔开 接口继承接口和类exteds
数组类型
关键字
类型+方括号 let fibonacci: number[] = 类数组
元组
关键字
固定长度和类型 越界添加-push 越界=联合类型 顺序相同
枚举
关键字
一组数值 默认编号 找到名字 异构枚举-不建议 计算成员
常数枚举: 编译成值 不能包含计算成员
外部枚举: declare 和const并用 declare const 声明文件
函数类型
###关键字
函数声明 函数表达式 表达式类型(类似箭头函数) 接口定义 可选参数-最后 默认值 扩展参数 重载
类型断言
关键字
值 as 类型 <类型>值 联合断言为其中一个类型 父类断言为子类 any 和任何类型互相断言 有交集的A和B,可以互相断言 断言不是类型转化 非空断言 !
兼容: 少兼容多
赋值 前者兼容后者 会剔除兼容外的属性和方法 比断言更严格
type
关键字
类型别名 字符串字面量类型
类
关键字
修饰符 类只允许被继承 不能被继承 只读属性 抽象方法 抽象类
声明合并
interface与类 属性类名必须一致 方法合并与方法的合并一致
泛型
关键字
使用时指定类型 function fn<T>():T{} 泛型约束extends``泛型接口 泛型类 默认类型
interface CreateArrayFunc {
<T>(length: number, value: T): Array<T>;
}
let createArray: CreateArrayFunc;
createArray = function<T>(length: number, value: T): Array<T> {
}
// 泛型接口提到接口名上
interface CreateArrayFunc<T> {
<T>(length: number, value: T): Array<T>;
}
// 泛型类
class GenericNumber<T> {
zeroValue: T;
add: (x: T, y: T) => T;
}
let myGenericNumber = new GenericNumber<number>();
// 默认类型
function createArray<T = string>(length: number, value: T): Array<T> {
// T 继承于 U,所以U肯定是要满足于T的
function copyFields<T extends U, U>(target: T, source: U): T {
for (let id in source) {
target[id] = (<T>source)[id];
}
return target;
}
let x = { a: 1, b: 2, c: 3, d: 4 };
copyFields(x, { b: 10, d: 20 });