[英]Define a record-like type with a specific value type for some keys
我的目标是定义一个类似记录的类型(带有任意一组键),但其中一些键是为特定值类型保留的。
我会创建一个 object 类似于:
const o: TRec = {
text: "abc",
width: 123,
height: 456,
//...whatever string key having a numeric value
}
也就是说,“text”必须是绑定到字符串的唯一键,而任何其他键都是数字。
但是,我找不到定义TRec
的方法。
到目前为止,我尝试了以下类型,但对于上述分配,它们都不可接受。 编译器显示此错误:
属性“文本”与索引签名不兼容。 类型“字符串”不可分配给类型“数字”。
type TRec = Record<string, number> &{
text: string;
}
type TRec = {
[key: string]: number;
text: string;
}
type TRec = Omit<Record<string, number>, "text"> & {
text: string;
}
有什么线索吗?
索引签名适用于与签名匹配的类型的所有成员。
TypeScript 没有办法指定“除了定义的键之外的所有内容”,因为它没有否定类型。 这种模式在今天的 TypeScript 中无法以不会中断的方式表达。 它的一个更 TS 友好的版本将所有额外的属性放在一个专用键上:
type Foo = { a: 1; extra: { [x: string]: 2 } }
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.