TS 创建描述性较低的 .d.ts 文件



>我在 .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;
};
};

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

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

我能想到的最好的方法是使用Record类型,将所有键写成一个联合,如下所示:

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

Record使用映射类型,因此请确保您熟悉它以了解其工作方式/原因。

最新更新