【发布时间】:2021-01-31 06:17:42
【问题描述】:
type SingleValue = string | number | bigint | boolean | null
type Value = SingleValue | SingleValue[]
function insert<T extends Record<string,Value>>(x: T) {
}
interface User {
id: number
name: string
}
insert<User>({ // <-- error
id: 1,
name: 'mpen',
})
这给出了一个错误:
类型“用户”不满足约束“记录”。
“用户”类型中缺少索引签名。(2344)
我知道User 缺少像{[prop: string]: Value} 这样的索引签名,但我想要让insert 只获取带有字符串键和Value 值的对象。 p>
我怎样才能以这种方式限制insert?
【问题讨论】:
-
不相关:可以将
Value简化为type Value = string | number | bigint | boolean | null | Value[]; -
@AlekseyL。那实际上是等效的吗?不是递归的吗?即将允许
[["foo"]]? -
是的,它是递归的,将允许
[["foo"]]。这是从 Typescript 3.7 github.com/microsoft/TypeScript/pull/33050 开始允许的 -
@AlekseyL。是的..这是一个不错的功能,但不是我想要的:-)
标签: typescript