我试图通过传递动态选择的处理程序来调用通用函数。处理程序的参数具有一个12
字段,该字段与用户提供的类型字符串匹配。我不确定如何在TypeScript中表达它。调用type
时如何调整类型以使problemFunction
正确设置通用类型?
getAndUseFoo
答案 0 :(得分:1)
我认为对此没有很好的答案。您可以复制代码以使编译器处理不同的情况:
function problemFunction(type: 'A' | 'B') {
const foo = (type === 'A') ?
getAndUseFoo(type, handlers[type]) :
getAndUseFoo(type, handlers[type]) ; // déjà vu
}
或使用类型不安全的type assertion:
function problemFunction(type: 'A' | 'B') {
const foo = getAndUseFoo(type, handlers[type] as (foo:Foo)=>void); // danger
}
我有asked for a way to handle this,它会告诉编译器将其控制流分析分布在并集类型的值上,但是除非有很多人大声疾呼(例如,转到该问题并给它加一个,然后评论)他们的用例)我怀疑是否会认真考虑。坦白地说,类型断言很容易,并且特别适合于您了解的知识不只编译器的时代。所以这就是我的建议。
希望有帮助。祝你好运!