我试图让Required
类型映射旧版本的打字稿的(就像2.6.2这就是离子框架3种用途)。
我有这个到现在为止:
declare type MakeRequired<T, K extends string> = {
[P in K]: string
}
declare type MyRequiredType = MakeRequired<MyInterface, keyof MyInterface>
这使得需要T
(MyInterface
)的可选属性,但当然它把所有这些类型来strings
。
所以
interface MyInterface {
optional?: Function
}
像结束
MyRequiredType {
optional:string
}
有没有办法说“采取的T [P]类型”?
我试过了:
[P in K]: T[K]
[P in K]: typeof T[K]
[P in K]: T[P]
我不流利的映射类型,我不知道现在在哪里去了。
免责声明:type-plus
笔者在这里。
如果你想获得T
要求在所有类型的属性类型,你可以在Required<T>
型使用的版本。
下面是Required<T>
类型定义:
type Required<T> = {
[P in keyof T]-?: T[P];
};
如果你想获得所需要的类型的特定部分,你可以使用RequiredPick<T, U>
RequiredExcept<T, U>
或type-plus
该代码是相当简单的,所以我也张贴在这里:
type RequiredPick<T, U extends keyof T> = Required<Pick<T, U>> & Pick<T, Exclude<keyof T, U>>
type RequiredExcept<T, U extends keyof T> = Required<Pick<T, Exclude<keyof T, U>>> & Pick<T, U>
您也可以使用RecursiveRequired<T>
如果这就是你想要的。
UPDATE:这需要打字稿2.8添加映射类型改善