我有一个对象数组:
export const myArr = [
{ id: 'type 1', ... },
{ id: 'type 2', ... },
{ id: 'type 3', ... },
...
] as const;
我想将id
属性提取到一个联合类型中。所需的结果是:
export type MyTypes = 'type 1' | 'type 2' | 'type 3' | ...;
我试过了
export type MyTypes = Extract<(typeof myArr)[number], 'id'>;
但是编译器坚持将其生成为type MyTypes = never
。我做错了什么?
1条答案
按热度按时间1rhkuytd1#
首先,
Extract
实用程序类型是用来做一些不同的事情的-当你有A
和B
类型时:则由
Extract<A, B>
返回的类型提取可以被分配给类型B
的联合类型A
的所有成员。另一个可能更有用的例子-对于类型:
type C = 'a' | 'b' | 1 | 10;
Extract<C, string>
类型为'a' | 'b'
有关详细信息,请参阅文档:
例如,参见:
现在,为了得到你想要的,你需要用途:
请注意,它比你的问题的注解中的示例更复杂,因为
Pick<(typeof myArr)[number], 'id'>
会给予你类型:这是一个键为
id
的对象类型,其类型为"type 1" | "type 2" | "type 3"
,而不仅仅是您需要的类型"type 1" | "type 2" | "type 3"
。看看它在VSCode中的样子: