繁体   English   中英

为某些键定义具有特定值类型的类记录类型

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM