【问题标题】:TS creates .d.ts file that is less descriptiveTS 创建描述性较差的 .d.ts 文件
【发布时间】:2018-06-23 01:30:18
【问题描述】:

我在 .ts 文件中有这个输入:

export const OverSizedItems = <{ [key: string]: OverSizedItemType }>{

  NONE: {
    factor: 1,
    count: 0,
    mooversNeeded: 1,
  },

  ONE: {
    factor: 1.01,
    count: 1,
    mooversNeeded: 4,
  },

  TWO: {
    factor: 1.03,
    count: 2,
    mooversNeeded: 4,
  },

  THREE_PLUS: {
    factor: 1.07,
    count: 5,
    mooversNeeded: 6,
  }

};

它转译为:

export declare const OverSizedItems: {
    [key: string]: OverSizedItemType;
};

但如果更改原件,并省略索引签名类型信息,我会得到这个,这就是我想要的:

export declare const OverSizedItems: {
    NONE: {
        factor: number;
        count: number;
        mooversNeeded: number;
    };
    ONE: {
        factor: number;
        count: number;
        mooversNeeded: number;
    };
    TWO: {
        factor: number;
        count: number;
        mooversNeeded: number;
    };
    THREE_PLUS: {
        factor: number;
        count: number;
        mooversNeeded: number;
    };

};

枚举在这里不起作用,因为枚举不能指向对象。

那么我该怎么做才能添加索引签名但保留所有值?

【问题讨论】:

    标签: node.js typescript typescript2.0 tsc


    【解决方案1】:

    我能想到的最好办法是使用 Record 类型,所有键都写在一个联合中,如下所示:

    type OverSizedItemKey = "NONE" | "ONE" | "TWO" | "THREE_PLUS"
    
    export const OversizedItems: Record<OverSizedItemKey, OverSizedItemType> = {
      // ...
    }
    

    Record 使用 mapped type,因此请确保您熟悉它以了解其工作原理/原因。

    【讨论】:

    • 谢谢,让我试一试 - 你觉得有什么办法可以让问题更清楚吗?
    • 当然,也许可以举一个你正在寻找的输出类型的例子,但除此之外,这个问题大部分对我来说很清楚
    猜你喜欢
    • 2021-10-19
    • 2020-04-19
    • 1970-01-01
    • 1970-01-01
    • 2012-03-27
    • 2021-05-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多