gpt4 book ai didi

typescript - 为什么不能将接口(interface)分配给 Record

转载 作者:行者123 更新时间:2023-12-03 07:37:18 25 4
gpt4 key购买 nike

我刚刚注意到无法将接口(interface)分配给 Record<string, unknown> (playground link):

interface Foo {
foo: number
}

const foo: Foo = { foo: 1 }
const bar: Record<string, unknown> = foo
// |-> Error: Type 'Foo' is not assignable to type 'Record<string, unknown>'
// Index signature is missing in type 'Foo'.(2322)
然而,当 Foo 的类型声明时,也是可能的。被省略( playground link):
const foo = { foo: 1 }
const bar: Record<string, unknown> = foo // no error here
问题:为什么两个示例之间存在差异?对我来说,变量 foo 的简化类型两个例子都是一样的……界面不应该是 Foo吗?可分配给 Record<string, unknwon> ?!
据我了解 Record<string, unknown>相当于 object因此任何接口(interface)都应该可以分配给它。还有 https://github.com/typescript-eslint/typescript-eslint/blob/master/packages/eslint-plugin/docs/rules/ban-types.md建议使用 Record<string, unknown>而不是 object .
备注:第一个示例适用于 object ( playground link ) 或 Record<string, any> ( playground link ) 被用来代替 Record<string, unknown> .

最佳答案

你遇到过Index signature is missing in type (only on interfaces, not on type alias) #15300
当您将接口(interface)更改为类型时,代码将起作用:

type Foo = {
foo: number
}

const foo: Foo = { foo: 1 };
const bar: Record<string, unknown> = foo;

关于typescript - 为什么不能将接口(interface)分配给 Record<string, unknown>?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65799316/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com