打字稿:检查参数是否属于某种类型

时间:2017-11-28 21:28:54

标签: typescript typescript2.0

我已经创建了这些构造函数实现:

constructor(position: FlagPosition, flag: string);
constructor(position: FlagPosition, flag: Expression<any> | string) {
    this.position = position;
    //TODO: Check falg type:
    //if flag is an string
    //    this(position, ExpressionUtils.template(Object.class, flag));
    //else
    //    this.flag = flag;
}

我不知道如何检查flag参数是字符串还是Expression<any>

有什么想法吗?

2 个答案:

答案 0 :(得分:1)

您可以使用

if (typeof flag === "string") {
//
} else if (name instanceof test) {
//
}

`

答案 1 :(得分:0)

在TS转换为JS时会发生什么以及在运行时会发生什么,你会发现错误。

flag: Expression<any> | string

在那里,当你调用函数时,TS会测试你是否正确传递了一个字符串或'Expression'。它在转换为JS时验证....

虽然

//TODO: Check falg type:
//if flag is an string
//    this(position, ExpressionUtils.template(Object.class, flag));
//else
//    this.flag = flag;

是在运行时生效的代码。在运行时'Expression'(这是一个接口)将不再存在(JS不知道接口是什么)。

因此,您测试参数的类型,但在构造函数的主体中,您应该将其视为具有接口属性的简单Object。