从地图接口类型推断类型?

问题描述 投票:1回答:1

我试图让Required类型映射旧版本的打字稿的(就像2.6.2这就是离子框架3种用途)。

我有这个到现在为止:

declare type MakeRequired<T, K extends string> = {
  [P in K]: string
}

declare type MyRequiredType = MakeRequired<MyInterface, keyof MyInterface>

这使得需要TMyInterface)的可选属性,但当然它把所有这些类型来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]

我不流利的映射类型,我不知道现在在哪里去了。

typescript typescript2.0
1个回答
0
投票

免责声明: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添加映射类型改善

© www.soinside.com 2019 - 2024. All rights reserved.