假设我有以下接口:
interface Item {
id: string;
name: string;
}
interface Foo {
items: Item[];
defaultItem: Foo[number]['id']
}
如果我有以下代码,我希望defaultItem
只是items
中设置的id
键之一,如下所示:
const myObj: Foo = {
items: [{ id: 'bar', name: 'Bar' }, { id: 'baz', name: 'Baz'} ],
defaultItem: 'fooooo' // error, can only be 'bar' and 'baz'
}
这是在打字吗?
我所尝试的:
1.在我的真实的实现中,Foo
看起来像这样:
interface Foo<TItems extends Item[]> {
items: TItems;
defaultItem: TItems[number]['id']
}
这最终推断出string
。
1.在myObj
中,我将as const
添加到数组items
中。没成功
我有什么选择?
1条答案
按热度按时间axr492tv1#
对于Typescript版本
>= 5.0.0
,我们将使用在5.0.0
中引入的const类型参数。基本上,它做的事情和const assertion做的事情一样。由于
const assertion
和const type parameters
都将数组转换为readonly
,因此我们也需要更新extends
的条件,此外,您提到接口将用作react组件 prop ,因此以下代码将在react上下文中:测试:
对于typescript版本
< 5.0.0
,只需一个const assertion
即可,因为我们更新了extends
条件:Playground