我正在构建一个控件,用户可以在其中传递路径字符串,以表示如何访问与其绑定的对象上的某些数据。
有什么方法可以定义类型,以便根据其他属性的值来键入其属性?
一个例子应该阐明我的意思。与此类似:
type RowPath: string;
type ColumnPath: string;
type FieldNamePath: string;
interface Item {
[key: RowPath]: number;
[key: ColumnPath]: number;
[key: FieldNamePath]: string;
}
class MyControl {
constructor(
private rowPath: RowPath,
private columnPath: ColumnPath,
private fieldNamePath: FieldNamePath,
private items: Item[]) { }
}
我想这样做是因为我可以使用类型安全的方式访问items
而不是使用any
:
const item = this.items[0];
const rowNum = item[this.rowPath]; //TypeScript knows this is a number
const colNum = item[this.columnPath]; //TypeScript knows this is a number
const fieldName = item[this.fieldNamePath]; //TypeScript knows this is a string
这似乎对我有用,除了TypeScript禁止其中包含类型别名的索引器。有什么办法吗?