给定一个函数的特定输入,我如何确保一个特定的输出,而不是一个联合?
例如:
class A {
specifically_for_a () {
return "A"
}
}
class B {
specifically_for_b () {
return "b"
}
}
function USE_TYPE (type : "A" | "B") {
return {
choices : ["A", "B"],
get my_choice () {
if (type === "A") {
return new A();
}
else {
return new B();
}
}
}
}
const a = USE_TYPE("A");
// expecting to have only type A
Playground:
https://www.typescriptlang.org/play?#code/MYGwhgzhAECC0G8BQ1XQgBwKbAJYDNdgwQQBPAfXwHsAnCsaACgEpEU1PasAXAV1oA7aACJYIjqgC+SGaEgwAQu06YcBIiXJU6FAEbM2yTl14DhIvRM4yZSfH0HAeuasICqAZQCiFACoAmgAK3sw8ZNjQAFyi4tAAPqKKIkaS0Nz8QiomqMAAFtREWDAxANpiIgA0SSIAupVpnADmvNAAtpT5hcBYhtk5nARhEb0AvOOxKf0DORnm0IJYAO5wrADcjQMyM5xYIBC9xjuzZlmLK4rrmznbW2m2SMBuEDzQjKPQXr6BIUwVLGsgA
1条答案
按热度按时间zpgglvta1#
最简单的方法是使用重载:
Playground链接
另一个选择,如果你有很多这样的方法,那就是使用一个接口来从名称Map到类型,然后索引到接口中。这将减少你需要的重载数量:
Playground链接