一、关于泛型上的一些 小知识
1.1泛型中使用的关键字
keyof
- 该操作符可以用于获取某种类型的所有键,其返回类型是联合类型。
export interface IdleIni {
idleTime: number;
timeoutTime: number;
pingTime: number;
}
interface IdleServiceSteupStringIni {
idleServiceSetup: Record<keyof IdleIni, string>;
// idleServiceSetup 的类型为 Record ,这里Record 与 IdleIni 一样
// keyof 获取 IdleIni 的键,值为string
}
-
keyof 声明接口的键为 IdleIni 的键,值为string
可以理解为
interface Record {
idleTime: string;
timeoutTime: string;
pingTime: string;
}
Partial
-
Partial 类型转化。 能让接口里的属性变为可选的
export interface IdleIni {
idleTime: number;
timeoutTime: number;
pingTime: number;
}
//变为
export interface IdleIni {
idleTime?: number;
timeoutTime?: number;
pingTime?: number;
}
Pick
type Pick<T, K extends keyof T> = {
[key in k]: T[key]
}
- 就是从一个复合类型中,取出几个想要的类型的组合,例如:
// 原始类型
interface TState {
name: string;
age: number;
like: string[];
}
// 如果我只想要name和age怎么办,最粗暴的就是直接再定义一个(我之前就是这么搞得)
interface TSingleState {
name: string;
age: number;
}
// 这样的弊端是什么?就是在Tstate发生改变的时候,TSingleState并不会跟着一起改变,所以应该这么写
interface TSingleState extends Pick<TState, "name" | "age"> {};