一、函数类型表达式
描述函数可以使用函数类型表达式。
格式:
1 | fn: (arg: string) => void |
比如在接口中使用
1 | interface pringStrToConsole { |
1 | let ps: pringStrToConsole = { |
或使用类型别名(type)定义一个函数类型
1 | type GreetFunction = (string)=>void |
调用签名
由于在js中,函数不仅可以被调用,函数本身也可以具有属性值。用函数类型表达式无法支持声明属性,这时候可以使用调用签名
格式:
1 | (str: string): void |
具体应用:
1 | type DescribableFunction = { |
构造签名
即,使用new Function时的用法,构造函数。
说实话,我没看太懂
1 | type SomeConstructor = { |
泛型函数
定义一个函数,返回数组的第一个元素。
由于数组的类型不一定,用any没有用泛型好。
泛型和强制类型转换都是尖括号<>
,泛型放在变量后,强制类型转换放在变量前。
1 | function firstElement<Type>(arr: Type[]): Type | undefined { |
1 | let strArr: string[] = ["aaa", "bbb", "ccc"]; |
二、对象类型
三、泛型
1 | function consoleLog<T,Y>(content: T | Y): void { |
四、工具类型
1. Partial
构造一个类型,所有的属性均为可选。
1 | interface TODO { |
2. Required
构造一个类型,所有的属性均为必选
1 | interface Props { |
3. Readonly
构造一个类型,所有的属性均为只读
1 | interface Todo { |
4. Record<Keys, Type>
构造一个类型,它的所有key是Keys类型,所有value是Type类型
1 | interface Employee { |
1 | type Key = "zhaoID" | "qianID" | "sunID" | "liID"; |
5. Pick<Type, Keys>
构造一个类型,保留Type中的Keys属性。
6. Omit<Type, Keys>
构造一个类型,从Type中过滤掉Keys属性
7. Exclude<UnionType, ExcludedMembers>
构造一个类型,从UnionType中排除所有可以赋给ExcludedMembers的类型。
其中UnionType和ExcludedMembers都是联合类型。
8. Extract<Type, Union>
构造一个类型,从Type中提取所有可以赋给Union的类型