Typescript 如何正确编写函数签名以接受联合类型的参数?
我试图为API提供一个函数,该函数可以接受类型为a或B的参数。我使用Typescript 如何正确编写函数签名以接受联合类型的参数?,typescript,Typescript,我试图为API提供一个函数,该函数可以接受类型为a或B的参数。我使用接口来键入参数。这些类型不共享单个成员。我的尝试导致编译器抱怨类型x上不存在属性x export interface MyTypeA { prop1: string; prop2: boolean; } export interface MyTypeB { prop3: number; prop4: string; } doSomething(param1: string, param2: MyTypeA |
接口
来键入参数。这些类型不共享单个成员。我的尝试导致编译器抱怨类型x上不存在属性x
export interface MyTypeA {
prop1: string;
prop2: boolean;
}
export interface MyTypeB {
prop3: number;
prop4: string;
}
doSomething(param1: string, param2: MyTypeA | MyTypeB){
switch(param1){
case 'a':
case 'b': {
const cf = this.resolver.resolveComponentFactory(MyClassAComponent);
const component = this.wrap.createComponent(cf);
component.instance.prop1 = param2.prop1;
component.instance.prop2 = param2.prop2;
break;
}
case 'c': {
const cf = this.resolver.resolveComponentFactory(MyClassBComponent);
const component = this.wrap.createComponent(cf);
component.instance.prop3 = param2.prop3;
break;
}
}
}
我不确定用
接口可以做到这一点,我想我可能不得不使用类型,但不知道如何使用。我看到了3种可能的解决方案:
- 对
param2
的每个用法进行强制转换
- 使用
- 使用
如果将param1
和param2
组合起来对您有意义,我会选择标记的联合体。否则,请使用用户定义的类型保护
我认为有3种可能的解决方案:
- 对
param2
的每个用法进行强制转换
- 使用
- 使用
如果将param1
和param2
组合起来对您有意义,我会选择标记的联合体。否则,请使用用户定义的类型保护
doSomething
的实现是什么样的?您所拥有的一切都很好,但是实现需要使用类型保护来确定接收到的内容。我过度简化了我的示例,模糊了我的用例。我在这里更新了签名,显示它是签名中两个参数之一。我试图基于param1
动态创建各种类(角度组件)的实例,然后为实例提供相关的param2
属性。现在我看了代码,我认为最好创建单独的方法。一些代码将被重复,但代码将获得可读性。尽管如此,我还是想知道如何在将来的案例中正确使用联合类型。doSomething
like的实现是什么?您所拥有的一切都很好,但是实现需要使用类型保护来确定接收到的内容。我过度简化了我的示例,模糊了我的用例。我在这里更新了签名,显示它是签名中两个参数之一。我试图基于param1
动态创建各种类(角度组件)的实例,然后为实例提供相关的param2
属性。现在我看了代码,我认为最好创建单独的方法。一些代码将被重复,但代码将获得可读性。尽管如此,我还是很想知道如何在将来的案例中正确使用联合类型。非常感谢!我感谢你提供如此详细的答复。我绝对最喜欢这种方法。感觉最像打字稿了。非常感谢!我感谢你提供如此详细的答复。我绝对最喜欢这种方法。感觉最像打字脚本。