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

时间:2012-10-08 06:50:37

标签: javascript typescript

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

5 个答案:

答案 0 :(得分:45)

Typescript 1.4引入Union Types所以答案现在是 是的,你可以

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

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

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

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

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

答案 1 :(得分:8)

这似乎有点老问题,但无论如何,我遇到了它,并且错过了我带来的其他答案。

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

Func<int, int>

这是因为&#34; union-types&#34;的新TypeScript概念。

您可以看到更多here

答案 2 :(得分:1)

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

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

答案 3 :(得分:0)

由于字符串,布尔值和数字是原始类型,我认为没有一种简单的方法。如果你要使用一组不同的对象类型,你可以想出一个超类,然后在你的方法的接口中指定那个超类。另一方面,您也可以使用方法重载来为字符串,布尔值和整数数组指定不同的实现。

答案 4 :(得分:0)

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

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