说我有一个对象列表,例如:
const TABS = [
{
name: 'Home',
// other properties
},
{
name: 'Profile',
// other properties
}
];
如何定义type Tab
,这是列表中每个对象的“名称”字段的类型?基本上相当于
type Tab = 'Home' | 'Profile';
在上述情况下(但无需在两个定义中都重复“ Home”和“ Profile”)。
只要TABS
在编译时知道的值并且防止编译器将其类型扩展为诸如之类的值,这是可能的Array<{name: string}>
。您希望编译器记住放入属性的值的特定字符串文字类型name
,而不仅仅是将它们视为string
s。最简单的方法是在创建时对数组文字使用const
断言TABS
:
const TABS = [
{
name: 'Home',
},
{
name: 'Profile',
}
] as const; // <-- need this
现在,编译器知道这TABS
是一对对象,第一个对象具有name
字符串文字类型的属性"Home"
,而第二个对象具有name
字符串文字类型的属性"Profile"
。
此时,您可以只使用查找类型来获取类型为name
的数字(number
)索引处的元素的属性TABS
:
type Tab = (typeof TABS)[number]["name"];
// type Tab = "Home" | "Profile"
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句