当前,如果我从类似下面的内容编译流/打字稿文件
// @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。对抗谷物有时会引起更多的头痛。