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

// @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";
}

最佳答案

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

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

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

函数printMessage(message:string){

    如果(typeof消息!=“字符串”)
        抛出新的错误(“ printMessage(消息):消息必须是字符串。”);

    其他{
        console.log(消息);
    }

}


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

10-08 17:03