是否可以使用联合类型作为接口中的键?例如,我想做这样的事情:
interface IMargin {
[key in 'foo' | 'bar']: boolean;
}
Run Code Online (Sandbox Code Playgroud)
但我收到此错误:
接口中的计算属性名称必须引用类型为文字类型或“唯一符号”类型的表达式。ts(1169)
有没有办法解决?
用例是将一组值转换为接口:
const possibleTypes = ['foo', 'bar'];
interface Types {
foo?: boolean;
bar?: boolean;
}
Run Code Online (Sandbox Code Playgroud)
Dmi*_*riy 27
您可以使用对象类型而不是接口,它们大多可以互换:
type IMargin = {
[key in 'foo' | 'bar']: boolean;
}
Run Code Online (Sandbox Code Playgroud)
Pab*_*iva 17
这不一定是答案,但我认为这可能会让其他人感兴趣。
您可以使用联合类型作为接口子属性中的键。
export type Language = 'EN' | 'DE' | 'IT';
export interface Document {
generic: string;
languages: {
[key in Language]: string[];
}
}
Run Code Online (Sandbox Code Playgroud)
接口不支持映射类型(这正是您在这里寻找的类型)。您可以使用类型别名,对于大多数用途,它应该工作相同(并非所有情况,但如果类型已知,您可以像实现接口一样实现类型别名)。
const possibleTypes = (<T extends string[]>(...o: T) => o)('foo', 'bar');
type Types = Record<typeof possibleTypes[number], boolean>
Run Code Online (Sandbox Code Playgroud)
映射类型Record应该可以在这里工作
| 归档时间: |
|
| 查看次数: |
9901 次 |
| 最近记录: |