繁体   English   中英

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

[英]Can I Specify Parameter Type as One of Many Types Instead of Any Type in TypeScript?

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

Typescript 1.4 引入了联合类型,所以现在的答案是肯定的,你可以

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

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


如果你想要一个包含多种特定类型的数组,你也可以使用联合类型:

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

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

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

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

class UtilsClass {
    selectDom(element: string | HTMLElement):Array<HTMLElement> {
        //Here will come the "magic-logic"
    }
}

这是因为“联合类型”的新 TypeScript 概念。

你可以在这里看到更多。

您可以使用函数重载来做到这一点:

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;

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM