编译流/打字稿后保留类型检查

时间:2018-10-18 18:48:46

标签: javascript node.js typescript flowtype

当前,如果我从类似以下的内容编译流/打字稿文件

// @flow

function foo(x: number): string {
    if (x) {
        return String(x);
    }
    return "default string";
}

module.exports = foo;

到以下:

function foo(x        )         {
    if (x) {
        return String(x);
    }
    return "default string";
}

module.exports = foo;

我的问题是,是否存在一种将代码转换为类似以下内容的方法?

function foo(x) {
    // preserve typechecking
    if (typeof x !== "number")
        throw new Error(`Expected x to be of type <number> instead got <${typeof x}>!!!!`);

    if (x) {
        return String(x);
    }
    return "default string";
}

1 个答案:

答案 0 :(得分:2)

不幸的是,Microsoft团队已决定在编译后不保留类型检查,因为这样做违反了他们的设计目标。这是GitHub上的issue thread

Microsoft has stated在“非目标”部分的#5中,将不会添加/依赖此功能。

但是,在计数时添加参数类型检查并不是很困难。

function printMessage(message: string) {

    if (typeof message != "string") 
        throw new Error("printMessage(message): message must be a string.");

    else {
        console.log(message);
    }

}

我想指出的是,这不是javascript专门设计的。对抗谷物有时会引起更多的头痛。