typescript - 使用字符串文字作为计算属性名称的模板参数
问题描述
假设我有几个对象,每个对象都包含一些类型相似的属性
interface Stuff<T> {
a: number;
b: string;
c: T;
}
type ThingOne {
one: Stuff<string>;
}
type ThingTwo {
two: Stuff<number>;
}
type ThingThree {
three: Stuff<boolean>;
}
有什么方法可以使用泛型参数化属性名称吗?我在想一些事情:
interface Thing<T, U> {
[key: U]: Stuff<T>;
}
// then
type ThingOne = Thing<string, 'one'>;
type ThingTwo = Thing<number, 'two'>;
type ThingThree = Thing<boolean, 'three'>;
显然[key: U]
是不正确的。我似乎无法弄清楚它应该是什么,或者它是否可能。
解决方案
您可以使用内置映射类型Record
,它采用string
文字类型(或字符串文字类型的联合),将是属性名称和成员的类型:
interface Stuff<T> {
a: number;
b: string;
c: T;
}
type ThingOne = Record<'one', Stuff<string>>;
type ThingTwo = Record<'two', Stuff<number>>;
type ThingThree = Record<'three', Stuff<boolean>>;
推荐阅读
- javascript - 使用 JQuery 在 Word Web 插件中选择文本
- apache-nifi - 流文件的颠簸转换
- chart.js - Chartjs - 具有多级 x 轴的条形图的数据格式
- c# - Ajax.BeginForm 使用不同的提交按钮和不同的提交方式
- caddy - 指定 Caddy 监听端口
- selenium - Selenium webdriver 切换选项卡
- matlab - 有没有办法在 MATLAB 中安全地修改 mex 文件?
- intellij-idea - 文件关闭后如何保存折叠的代码结构
- node.js - MongoDB cursor.each 方法返回一个最终的空值
- magento2 - 我们如何使用自定义属性获取产品信息?