如何调用接收联合类型参数的TypeScript函数?
问题原因
你调用报错的核心原因是混淆了TypeScript的编译期类型和运行时值:
- 你定义的
Fish、Bird都属于类型别名,仅在编译阶段做静态类型校验使用,编译成JS后会被完全抹除,不能直接作为实际参数传入函数 swim是Fish类型对象挂载的方法,本身也不符合Fish | Bird的类型要求,因此move(swim)也会触发类型报错
正确调用方式
你需要先构造出符合Fish或Bird类型结构的实际对象,再传入move函数即可,以下是可运行的示例:
// 构造符合Fish类型的对象 const goldfish: Fish = { swim: () => console.log("鱼类游动") } // 构造符合Bird类型的对象 const sparrow: Bird = { fly: () => console.log("鸟类飞翔") } // 调用函数 move(goldfish) move(sparrow)
你也可以直接传入符合结构要求的对象字面量,TypeScript会自动完成类型推断:
move({ swim: () => console.log("直接游动") }) move({ fly: () => console.log("直接飞翔") })
内容的提问来源于stack exchange,提问作者Vojta Simek
相关产品推荐
相关产品推荐

