【发布时间】:2017-11-03 09:39:34
【问题描述】:
我有第一个参数的可能值的枚举,我希望第二个参数基于第一个参数。因此,如果给出 NAME,我希望第二个参数是字符串。如果给定 AGE,我希望第二个参数是一个数字。
我该怎么做?
enum KeyType {
NAME,
AGE
}
class MyClass {
public static setProperty(key: KeyType.NAME, value: string): void { }
public static setProperty(key: KeyType.AGE, value: number): void { }
}
我想这样调用方法:MyClass.setProperty(KeyType.NAME, 'John');
此外,这应该显示一个错误:MyClass.setProperty(KeyType.NAME, 5); // 5 不是字符串
在这个例子中它不起作用,因为key类型被错误定义(键类型实际上是枚举的值,所以键类型是0)。
我也愿意接受有关具有仅允许特定参数键的特定类型的功能的不同方法的建议。
【问题讨论】:
-
您的意思是希望它根据您碰巧放入
MyClass的内容计算出类型?那些可能有不止一种类型的东西呢?您不只是使用属性name: string;和age: number;是否有特殊原因? -
@jonrsharpe 我希望它是一个重载的方法。所以,同样的方法,但是第二个参数的类型是基于第一个参数的 KeyType 值。所以,你建议像
MyClass.name = string这样的东西,但我想要像MyClass.set('name', string)这样的东西。这样,当名称存储在变量中时,我可以动态设置属性值。另外,这样我就有了一个enum可以更改的所有可用属性。 -
你不需要
keyof的枚举。您可以使用thing[name]动态分配。但我认为这类似于stackoverflow.com/questions/46909089/… -
@jonrsharpe 我会调查一下,我不知道
keyof运算符。 -
嗯,这似乎接近我想要的:typescriptlang.org/docs/handbook/release-notes/…
标签: javascript typescript types enums overloading