先熟悉一下基础内容 断言和泛型
类型断言
尖括号语法 <类型>变量名
let value:any = "this is a string";
let length:number = (<string>value).length;
as语法 变量名 as 类型
let value:any = "this is a string";
let length:number = (value as string).length;
非空断言
明确某个值不可能为undefined和null时,可以在变量后面加个!
function(value:string|undefined|null){
const str:string = value; // error value有可能为undefined和null
const str:string = value!; // ok
const length: number = value.length; // error value 可能为 undefined 和 null
const length: number = value!.length; //ok
}
确定赋值断言
在实例属性和变量属性声明后面放置一个!号,表示该属性会被明确的赋值
let name!:string
泛型
// 传入的类型和返回的类型相同
function identity<T>(arg:T):T{
return arg
}
// 使用
identity<string>('hello')
程序类型工具
注意:这些程序类型仅限制于type类型声明中使用
Record
以typeof格式快速创建一个类型,此类型包含一组指定的属性且都是必填。
type Coord = Record<x|y,number>
type ImageList = Record<string,{default:string}>
// 等同于
type coord = {
x:number;
y:number
}
type ImageList = {
[key:string]:{default:string};
}
Partial
将类型定义的所有属性变为可选
type Coord = Partail<Record<x|y,number>>
//等同于
type coord = {
x?:number;
y?:number
}
Pick
从类型定义的属性中选取指定的一组属性,返回新的类型定义
type Coord = Record<x|y,number>
type CoordX = Pick<Coord,x>
// 等同于
type Coordx = {
x:number;
}
Require
将类型定义的所有属性变为必填,与Parital相反
type Coord = Require<{x:number,y?:number}>
// 等同于
type Coordx = {
x:number;
y:number;
}
Omit
排除指定的属性,与Pick相反
interface Coord {
a:number;
b:string;
c:boolean;
}
type AC = Omit<Coord,b> // {a:number;b:string}
type C = Omit<Coord,a|b> // {c:boolean}