我已使用打字稿LIB的软件包Exclude and Required。当我在一个环境中使用此包与最近打字稿版本,它工作正常。我试图使用它在使用打字原稿旧离子3项目~2.6.2
(离子3不支持2.7
)该应用符,因为打字稿不理解:
找不到名称“排除”。
export declare type LoggerTypesObjectForColors = {
[key in Exclude<LoggerTypesEnum, LoggerTypesEnum.dir>]?: string;
};
找不到名称“必填”。
export declare type RequiredLoggerConfig = Required<ILoggerConfig>;
是否可以降级类型定义? (或类似动作)
编辑:如果我填充Required
也会破坏
多亏了this article,我才得以进行Remove
地图
declare type Remove<T extends string, U extends string> = ({ [P in T]: P } & { [P in U]: never } & { [x: string]: never })[T];
这是我试图使Required
。现在我有这个:
declare type MakeRequired<T, K extends string> = {
[P in K]: string
}
但我需要一种方式来获得T [P]或类似的类型。
答案 0 :(得分:1)
不幸的是,由于Required
和Exclude
都依赖于features added in TypeScript 2.8(对映射类型修饰符的控制得到改善,和条件类型的控制)。如果使用者使用TypeScript 2.6,则不能为他们提供使用这些功能的定义。
但是,这并不意味着您的消费者在使用现代版本的TypeScript时应受苦。为了使您的类型符合旧版本,请在您的软件包中附带两种类型的版本-现代版本和旧版本。
<强>现代打字稿强>
构建它们,就像你现在构建它们。
TypeScript的旧版
您将没有Required
,但是您可以使用旧版Diff
和`Omit'达到类似的结果。
type Diff<T extends string, U extends string> = ({[P in T]: P } & {[P in U]: never } & { [x: string]: never })[T];
type Omit<T, K extends keyof T> = {[P in Diff<keyof T, K>]: T[P]};
提供两种类型的类型
要捆绑多个版本的打字,请为typesVersions
添加一个名为package.json
的字段。例如:
"types": "index.d.ts",
"typesVersions": {
"<=2.8.0-0": {
"*": [
"types-legacy/*"
]
}
},
您可以了解有关捆绑多个类型的here类型的更多信息。