当我在Typescript中尝试类似的操作时...
interface SomeType {
size: 'sm' | 'md' | 'lg';
other: any;
}
let size: Pick<SomeType, 'size'> = 'sm';
我收到此错误。这是预期的错误吗?
Type '"sm"' is not assignable to type 'Pick<SomeType, "size">'
答案 0 :(得分:2)
Pick<SomeType, 'size'>
将创建一个具有属性size
的对象类型,基本上与{ size: 'sm' | 'md' | 'lg'; }
相同。
您可能正在寻找类型索引查询:
interface SomeType {
size: 'sm' | 'md' | 'lg';
other: any;
}
let size: SomeType['size'] = 'sm'; //ok
答案 1 :(得分:2)
来自Pick的定义
type Pick<T, K extends keyof T> = { [P in K]: T[P]; }
您使用的是
{ size: 'sm' | 'md' | 'lg'; }
所以你必须做
let size: Pick<SomeType, 'size'> = { size: 'sm' };