从ts编译为js后如何保持类型安全

时间:2018-09-27 06:30:03

标签: javascript typescript type-safety

TS代码:

function f(val1:number) {
    console.log(val1);
}

JS代码,编译后:

function f(val1) {
    console.log(val1);
}

即使从ts转换为js后,还有什么方法可以保持类型安全?

2 个答案:

答案 0 :(得分:2)

编译为JS后无法保留类型。 JS没有静态类型的概念。 Typescript是一个静态类型检查器,输出是纯JS。因此,编译后没有任何类型可以持久。

如果您使用TS编写应用程序,则编译器将验证您正在执行的操作是否是类型安全的,因此在运行时一切正常。 (尽管即使在TS代码中,您也可以使用any和类型断言来破坏类型安全并做不安全的事情)

答案 1 :(得分:0)

JavaScript是一种动态类型的语言。它将根据需要转换类型-请参见type coercion

如果您确实要确保函数中使用了某种类型,则必须在代码中进行检查。
例如:

function f(val1) {
    if (typeof val1 !== "number") {
        throw new Error("not a number");
    }
    console.log(val1);
}

请记住,这只是一个例子。
如果您尝试将var x = new Number(42)传递给函数,则由于typeof xobject,它仍然会引发错误。
因此,在进行此类检查时,您需要格外小心。