typescript 在.d.ts文件中接受重复的索引签名,但在.ts [duplicate]中不接受

wfauudbj  于 2022-12-30  发布在  TypeScript
关注(0)|答案(1)|浏览(413)
    • 此问题在此处已有答案**:

The error of 'Duplicate string index signature' at Reactjs with Typescript(2个答案)
昨天关门了。
社区正在审查是否从昨天开始重新讨论这个问题。

    • 不是重复项。链接的答案没有解释为什么此错误出现在. ts文件中,而没有出现在. d.ts文件中。**

我在.ts文件中声明了一个类型:

export type ErrorMsg = {
  [min: string]: string
  [max: string]: string
  [differentFrom: string]: string
}

我不明白为什么TypeScript在这里抱怨

TS2374: Duplicate index signature for type 'string'.

我猜TS建议将其简化为如下形式:

export type ErrorMsg = {
  [index: string]: string
}

但是如果我不想允许 * any * string索引-我只想允许这3个属性呢?
另外,当我在. d.ts文件中声明相同的ErrorMsg类型时,它不会抛出这个错误,这更让人困惑。我读过"*. d. ts文件中允许的任何内容也可能出现在 *. ts文件中",但这里似乎不是这样。
当我将其更改为Interface或Type alias时,我尝试访问一个元素:

No index signature with a parameter of type 'string' was found on type 'ErrorMsg'
ccrfmcuu

ccrfmcuu1#

定义已知属性的正确方法类似于在对象文本中定义属性的方法:

export type ErrorMsg = {
  min: string;
  max: string;
  differentFrom: string;
};

一个显著的区别是分号是允许的,也是可选的。
请参见手册中的object types

相关问题