这是我参与「第四届青训营 」笔记创作活动的的第7天
TypeScript入门笔记
TypeScript与JavaScript相比,TypeScript是静态类型,JavaScript是动态类型。
基本语法
基础数据类型
字符串:
const q: string = 'string';
数字:
const w:number = 1;
布尔值:
const e:boolean = true;
null:
const r:null=null;
undefined:
const t:undefined = undefined;
对象类型
在对象类型前加个“I”,用于区分类型和对象名,例如:
const byedancer:IBytedance = {}
用interface声明定义对象,例如:
interface IBytedance{}
其中,readonly 表示只读属性,约束属性不可在对象初始化外赋值。除此之外还有:
可选属性:定义该属性可以不存在(在“:”前加“?”)
hobby?:string;
任意属性:约束所有对象属性都必须是该属性的子类型
[key:string]:any;
函数类型
在变量后面加“:类型”,如:
function add(x: number, y: number): number {
return x + y;
}
const mult: (x: number, y: number) =>number = (x,y)=>X*y;
//也有声明定义那种方法,如下:
function add(x,y){
return x + y;
}
const mult = (x,y) =>x * y;
interface IMult{
(x:number, y:number): number;
}
const mult: IMult =(x,y) =>x * y;
函数重载
数组类型
数组有三种表示方式:
一、类型+“[]”表示
例:
type IArr1 = number[];
const arr1:IArr1 = [1,2,3,4,5,6];
二、泛型表示
type IArr2 = Array<string | number | Record<string,number>>;
const arr2 = IArr2 = [1,2,'3','4',{a;1}];
三、元祖表示
type IArr3 = [number,number,string,string];
const arr3:IArr3 = [1,2,'3','4'];
四、接口(interface)表示
interface IArr4{
[key:number]:any;
}
const arr4:IArr4 = ['string',() => null,{},[]];
补充类型
空类型
表示无赋值
type IEmptyFunction = () => void;
任意类型
是所有类型的子类型
type IAnyType = any;
枚举类型
支持枚举值枚举名的正、反向映射 (两个功能相互调换)
enum EnumiExample {
add = '+',
mult = '*',
}
EnumiExample['add'] === '+';
EnumiExample['+'] === 'add';
enum ECorlor {Mon,Tue,Wed,Thu,Fri,Sat,Sun};
ECorlor['Mom'] === 0;
ECorlor[0] === 'Mon';
泛型
type INumArr = Array<number>;
泛型:不预先指定具体的类型,而在使用的时候再指定类型的一种特性
type IGetRepeatArrR = <T>(target:T) =>T[];
泛型接口&多泛型
interface IX<T,U>{
key:T;
val:U;
}
泛型类:
class IMan<T>{
instance:T;
}
泛型别名
type ITypeArr<T> = Array<T>;
一些示例:
类型别名&类型断言
关键字type:通过type关键字定义别名类型。
关键字as:通过as关键字,断言类型为正确类型。
例:
字符串/数字 字面量
高级类型
联合/交叉类型
- 联合类型: IA | IB;联合类型表示一个值可以是几种类型之一
- 交叉类型: IA &IB;多种类型叠加到一起成为一种类型,它包含了所需的所有类型的特性
例如:
类型保护与类型守卫
- 类型保护又叫类型守卫,是为了提高程序的鲁棒性存在的。
- 类型守卫 : 定义一个函数,它的返回值是一个类型谓词,生效范围为子作用域。
其它关键字
keyof:索引类型,其相当于取值对象中的所有key组成的字符串字面量,如
type IKeys = keyof{ a: string; b: number };
// => type IKeys = "a " | "b"
in:其相当于取值字符串字面量中的一种可能,配合泛型P,即表示每个key。
“?”:通过设定对象可选选项,即可自动推导出子集类型。
extends:跟随泛型出现时,表示类型推断,其表达可类比三元表达式,如
T===判断类型?类型A:类型B
infer:出现在类型推荐中,表示定义类型变量,可以用于指代类型。如该场景下,将函数的返回值类型作为变量,使用新泛型R表示,使用在类型推荐命中的结果中。