写给自己的typeScript记忆要点

110 阅读3分钟

什么是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 });