Javascript 我可以将参数类型指定为多种类型中的一种,而不是TypeScript中的任何类型吗?

Javascript 我可以将参数类型指定为多种类型中的一种,而不是TypeScript中的任何类型吗?,javascript,typescript,Javascript,Typescript,在TypeScript中的方法声明中,参数可以是字符串、布尔或数字数组类型。是否必须将其声明为any[]或是否有方法将输入类型限制为这三种类型中的任意一种?您可以使用函数重载来执行此操作: class Thing { public foo(x: number[]); public foo(x: bool[]); public foo(x: string[]); public foo(x: any[]) { // Note: You'll have t

在TypeScript中的方法声明中,参数可以是字符串、布尔或数字数组类型。是否必须将其声明为any[]或是否有方法将输入类型限制为这三种类型中的任意一种?

您可以使用函数重载来执行此操作:

class Thing {
    public foo(x: number[]);
    public foo(x: bool[]);
    public foo(x: string[]);
    public foo(x: any[]) {
       // Note: You'll have to do type checking on 'x' manually
       // here if you want differing behavior based on type
    }
}

// Later...
var t = new Thing();
t.foo(someArray); // Note: External callers will not see the any[] signature

因为字符串、布尔值和数字都是基本类型,所以我认为没有简单的方法。如果您要使用一组不同的对象类型,您可能会产生一个超类,然后在方法的接口中指定该超类。另一方面,还可以使用方法重载为字符串、布尔值和整数数组指定不同的实现。

解决此问题的另一种方法是查找输入类型之间的常用方法和属性,并在方法声明中声明包含这些常用方法和属性的内联类型。 像这样:

methodName(param1: { prop1: number; prop2: string; }, param2: { propA: bool; propB: string; } ): methodResultType;

这似乎是一个老问题,但无论如何,我遇到了它,错过了我带来的另一个答案

从TypeScript 1.4中,似乎可以为函数参数声明多种可能的类型,如下所示:

class UtilsClass {
    selectDom(element: string | HTMLElement):Array<HTMLElement> {
        //Here will come the "magic-logic"
    }
}
class-UtilsClass{
selectDom(元素:string | HTMLElement):数组{
//“神奇的逻辑”就要来了
}
}
这是因为“联合类型”的新类型脚本概念

您可以看到更多信息。

引入了Typescript 1.4,因此现在的答案是是的,您可以

使用指定类型以外的其他类型将触发编译时错误


如果需要多个特定类型的数组,也可以使用联合类型:

function myFunc(param: (string|boolean|number)[]): void;

请注意,这与OP要求的不同。这两个示例有不同的含义。

函数重载可能会有所帮助。超级类可以工作,它是一种包含常用方法和属性的内联类型。在我看来,它可以是一个完全由一种类型组成的数组,其中该类型可以是字符串、布尔值或数字。如果一个数组只能包含这三种类型的混合体呢?我不确定这是OP要求的,但我还是编辑了我的答案。你显然明白这两者之间的区别。如果我们想传递其他类型的字符串/布尔值/数字呢?现在我尝试使用myFunc(param:string | Reactelement),但它给出了error,这是函数式的方法吗
function myFunc(param: (string|boolean|number)[]): void;