enum Channel {
GITHUG = 'github',
GITLAB = 'gitlab',
}
interface Github {}
interface Gitlab {}
function foo (a, b) {}
第一个参数a是枚举(通道)值
如果参数a为github,则b的类型为GitHub
如果参数a为gitlab,则b的类型为Gitlab
如何定义函数foo的类型?
enum Channel {
GITHUG = 'github',
GITLAB = 'gitlab',
}
interface Github {}
interface Gitlab {}
function foo (a, b) {}
第一个参数a是枚举(通道)值
如果参数a为github,则b的类型为GitHub
如果参数a为gitlab,则b的类型为Gitlab
如何定义函数foo的类型?
4条答案
按热度按时间czfnxgou1#
这里有一些替代方法:
Playground
qjp7pelc2#
使用conditional types technique。查看下面的示例或转到在线Playground以进行实际测试(感谢Joonas的帮助)
拜托,让我知道它是否有效)
mwkjh3gx3#
请看代码注解:
Playground
dgiusagp4#
我遇到了一个非常相似的问题,在我的例子中,第二个参数类型来自一个接口:
我的
foo
函数必须与实现接口的所有类型一起工作,因此它本身是泛型的:事实证明,泛型类型和推断类型的声明不能混合,但可以将它们放在不同的括号中: