更改类型定义编译的模块的版本

时间:2019-02-02 19:22:13

标签: typescript typescript-typings

我已使用打字稿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也会破坏

enter image description here

多亏了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]或类似的类型。

1 个答案:

答案 0 :(得分:1)

不幸的是,由于RequiredExclude都依赖于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类型的更多信息。