Typescript有什么冷门但是很好用的特性?

获取一个值的类型
let defaultState = {foo: 7,bar: 'hello'};type State = typeof defaultState;let nextState: State = {foo: 'seven',bar: 'world'};// 不能将类型“{ foo: string; bar: string; }”分配给类型“{ foo: number; bar: string; }”。// 属性“foo”的类型不兼容。// 不能将类型“string”分配给类型“number”。
获取一个函数的返回值的类型
function getState() {return {foo: 7,bar: 'hello'};}type State = ReturnType<typeof getState>;let nextState: State = {foo: 'seven',bar: 'world'};// 不能将类型“{ foo: string; bar: string; }”分配给类型“{ foo: number; bar: string; }”。// 属性“foo”的类型不兼容。// 不能将类型“string”分配给类型“number”。
将一个类型中的所有属性都变成可选属性
let defaultState = {foo: 7,bar: 'hello'};type PartialState = Partial<typeof defaultState>;let partialState: PartialState = {foo: 8};
取出一个类型中的部分属性,生成另一个类型
let defaultState = {foo: 7,bar: 'hello'};type PickedState = Pick<typeof defaultState, 'foo'>;let partialState: PickedState = {foo: 8,bar: 'world'};// 不能将类型“{ foo: number; bar: string; }”分配给类型“Pick<{ foo: number; bar: string; }, "foo">”。// 对象文字可以只指定已知属性,并且“bar”不在类型“Pick<{ foo: number; bar: string; }, "foo">”中。
还有一些其他内置工具类型,可以在把鼠标放到 ReturnType 上,按 F12 查看
type Readonly<T> = {readonly [P in keyof T]: T[P];}type Partial<T> = {[P in keyof T]?: T[P];}type Nullable<T> = {[P in keyof T]: T[P] | null;}type Proxy<T> = {get(): T;set(value: T): void;}type Pick<T, K extends keyof T> = {[P in K]: T[P];}type Record<K extends string, T> = {[P in K]: T;}
评论
