我正在寻找一种为以下对象创建TypeScript类型的方法,该对象具有两个已知键和一个具有已知类型的未知键:
interface ComboObject {
known: boolean
field: number
[U: string]: string
}
const comboObject: ComboObject = {
known: true
field: 123
unknownName: 'value'
}
Run Code Online (Sandbox Code Playgroud)
该代码无效,因为TypeScript要求所有属性都与给定索引签名的类型匹配。但是,我不想使用索引签名,我想在一个我知道其类型但不知道其名称的地方键入一个字段。
到目前为止,我唯一的解决方案是使用索引签名并设置所有可能类型的联合类型:
interface ComboObject {
[U: string]: boolean | number | string
}
Run Code Online (Sandbox Code Playgroud)
但这有很多缺点,包括允许在已知字段上输入不正确的类型以及允许任意数量的未知键。
有没有更好的方法?使用TypeScript 2.8条件类型有帮助吗?