Typescript 打字脚本:一些奇怪的排列使打字中断

Typescript 打字脚本:一些奇怪的排列使打字中断,typescript,Typescript,为什么这样做没有错误: interface S { chats: { [ChatId: number]: { name: string messages: [] } } } const s1: S = { chats: { [1123]: { name: 'some', messages: [], }, }, } const s2: S = { chats: { ...s1, },

为什么这样做没有错误:

interface S {
  chats: {
    [ChatId: number]: {
      name: string
      messages: []
    }
  }
}

const s1: S = {
  chats: {
    [1123]: {
      name: 'some',
      messages: [],
    },
  },
}

const s2: S = {
  chats: {
    ...s1,
  },
}

console.log('s2', s2)

此定义给出非法结果:
s2{chats:{chats:{'1123':[Object]}}}


这是错误还是不理解?

这实际上是预期的行为。这有点违反直觉,但是像
{[id:number]:{}}
这样的类型不需要有任何这样的属性。另一个例子是
const x:Record={}
应该是有效的。不需要有什么属性?我不明白<代码>聊天:{chats:{}不起作用,但
聊天:{…s1,}
为什么?将其更改为
[ChatId:string]:
修复了此问题。我怀疑这与所有js对象键实际上都是字符串这一事实有关。但我不知道如何解释typescript到底在这里做什么……是的,回购协议似乎已经存在问题