是否可以在接口中使用联合类型作为键?例如,我想做这样的事情:
interface IMargin {
[key in 'foo' | 'bar']: boolean;
}
但是我遇到了这个错误:
接口中的计算属性名称必须引用其类型为文字类型或“唯一符号”类型的表达式。ts(1169)
有什么办法解决吗?
用例将值数组转换为接口:
const possibleTypes = ['foo', 'bar'];
interface Types {
foo?: boolean;
bar?: boolean;
}
答案 0 :(得分:2)
这不一定是一个答案,但我认为这可能会让其他人感兴趣。
您可以使用联合类型作为接口子属性中的键。
export type Language = 'EN' | 'DE' | 'IT';
export interface Document {
generic: string;
languages: {
[key in Language]: string[];
}
}
答案 1 :(得分:1)
您可以使用对象类型代替接口,而接口通常是可以互换的:
batchfile.bat y
答案 2 :(得分:0)
接口不支持映射类型(这是您在此处寻求的)。您可以使用类型别名,对于大多数用途,它应该具有相同的功能(并非在所有情况下都可以使用)(如果知道类型,则可以像执行接口一样实现类型别名)。
Review.includes(:check_in).where(check_ins: Date.today..)
映射类型const possibleTypes = (<T extends string[]>(...o: T) => o)('foo', 'bar');
type Types = Record<typeof possibleTypes[number], boolean>
应该在这里起作用
答案 3 :(得分:0)
可以将 union
映射为 Type
而不是 Interface
作为选项。
type Language = "EN" | "DE";
type Types<T> = {
[K in Strings]?: boolean
}