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到底在这里做什么……是的,回购协议似乎已经存在问题