如何基于类属性创建类型? 在此示例中,将说明此想法。当前,这就是我们可以基于类属性创建类型的方法,但是它只能在该类的函数/方法中起作用。
class A
{
properties = { name: 'John'}
getProperty(propName: string): any
{
const properties = this.properties;
type propertiesType = typeof properties;
let validKey: keyof propertiesType = 'name';
let invalidKey: keyof propertiesType = 'age';
return properties[propName];
}
}
此代码目前可以使用,但不允许我们在类级别上提取propertiesType。如果可能的话,我们可以编写下面的伪代码示例:
// Pseudo Code
class A
{
properties = { name: 'John'}
type propertiesType = typeof this.properties;
getProperty(propName: keyof propertiesType): any
{
// compile time check for propName validity.
}
...
}
所以问题是,有没有一种方法可以基于类属性提取类型并在类级别使用此类型?
答案 0 :(得分:1)
您可以使用索引类型查询来获取属性的类型(没有实例,就像您在答案版本中所做的那样:
type propertiesType = A['properties']
type availableKeys = keyof A['properties'];
class A {
properties = { name: 'John' }
getProperty(propName: availableKeys): any {
}
}
答案 1 :(得分:0)
经过一番苦苦挣扎,这是我发现的唯一可行的方法。请评估是否发现有任何流程或改进值得您分享。
type availableKeys = keyof typeof a.properties;
class A
{
properties = { name: 'John' }
getProperty(propName: availableKeys): any
{
type x = typeof A;
return this.properties[propName];
}
}
}
let a = new A();
a.getProperty('test'); // will give compile time error, only 'name' is allowed.