从字符串参数中选择通用接口类型

时间:2018-07-15 13:04:31

标签: typescript

我试图通过传递动态选择的处理程序来调用通用函数。处理程序的参数具有一个12字段,该字段与用户提供的类型字符串匹配。我不确定如何在TypeScript中表达它。调用type时如何调整类型以使problemFunction正确设置通用类型?

getAndUseFoo

1 个答案:

答案 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,它会告诉编译器将其控制流分析分布在并集类型的值上,但是除非有很多人大声疾呼(例如,转到该问题并给它加一个,然后评论)他们的用例)我怀疑是否会认真考虑。坦白地说,类型断言很容易,并且特别适合于您了解的知识不只编译器的时代。所以这就是我的建议。

希望有帮助。祝你好运!