一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第7天,点击查看活动详情。
接上一文——《TypeScript浅学习总结(一)》,还有一些补充如下:
一、函数
1、我们可以为函数的参数添加类型,也可以为返回的值添加类型,但是ts能根据返回的值自动推断出它的类型,所以返回的类型一般会忽略它:
const fn = (x: number, y: number): number => {
return x + y;
}
如果函数没有返回任何值,你也必须指定返回值类型为 void而不能留空
2、可选参数和默认参数
在ts中,对于可选的参数,可以通过?来实现,注意: 可选参数要放在必传参数的后面。
const fn = (x: string, y?: string): string => {
return x + y;
}
ts中还可以设置默认的参数,默认参数不用放在必传参数后面了,默认参数是指当用户没有传递这个参数或者传入的是undefined时,给的一个默认值:
const fn = (x: string, y = 'er'): string => {
return x + y;
}
fn('play') //player
fn('play','ing') //playing
fn('play',undefined) //player
fn('play','d','x') //error, too many parameters
二、高级类型
联合类型
当一个参数希望传入number或者string时,可以使用联合类型:
const fn = (x: number | string) => {...}
类型谓词
书写形式为parameterName is Type
const isNumber = (x: any): x is number => { return typeof x === "number"; }
指定了x是一个number类型
索引类型
索引类型查询操作符: keyof T, keyof T是T上所有公共属性的联合:
interface people {
name: string;
age: number
}
let p:keyof people ; // name | age
索引访问操作符: T[K]
需要确保K extends keyof T
例如:
pluck<T, K extends keyof T>(o: T, names: K[]): T[K][]
传入两个参数: T 代表泛型, K extends keyof T 表示 K 这个参数要属于T中的公共属性类型,返回的是T中K属性的值,是一个数组形式……
Pick<T, K extends keyof T>: 从T中挑选需要的属性组成新的类型
type Pick<T, K extends keyof T> = {
[P in K]: T[P];
}
Record<K extends string, T>:构造一个新的类型,属性名的类型为K,属性值的类型为T
type Record<K extends string, T> = {
[P in K]: T;
}
Exclude<T, U> -- 从T中剔除可以赋值给U的类型。
type Person = Exclude<'age' | 'name' | 'habbit', 'name' | 'sex'>
// 'age','habbit'