TypeScript浅学习总结(二)

341 阅读2分钟

一起养成写作习惯!这是我参与「掘金日新计划 · 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'