我有一个带有许多属性的Typescript界面。没有此接口的任何实例,我需要确定给定属性的类型。
export interface Data {
foo: string;
bar: number;
.
.
.
}
这可以通过在Data
上使用带有不变字符串的索引签名来实现。
type propType = Data['foo']; // propType = 'string'
但是,使用变量不不起作用。
const propName = 'foo';
type propType = Data[propName]; // Errors
错误:
这两个错误都没有道理,因为propName
绝对是string
而不是any
,也不是“这里用作类型”。
更新
很明显,我正在尝试做一些不可能的事情。经过艰苦的战斗,我终于接受了未经实例化的接口,并且在运行时不会拥有属性或属性类型信息。
使用type
的此方法将有效,但仅在编译时有效。我批准了使用正确语法的答案。
(仍然认为我的问题中的错误消息很奇怪。)
答案 0 :(得分:0)
您有两种解决方案。要么
export interface Data {
foo: string;
bar: number;
}
type propName = 'bar';
type propType = Data[propName]; //number
或
export interface Data {
foo: string;
bar: number;
}
const propName = 'bar'; //or let propName: 'bar' = 'bar' (both are type literals)
type propType = Data[typeof propName]; //number (typeof propName is 'bar')