javascript - hur man bevarar typesäkerhet även efter kompilering från ts till js


TS-kod :

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

JS-kod, efter kompilering :

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

Finns det något sätt att behålla typesäkerhet även efter att ha konverterat till JS från TS?

Svar #1

Det finns inget sätt att behålla typer efter kompilering till JS. JS har inget koncept av statiska typer. Typescript är en statisk typkontrollant, och utdata är vanlig JS. Därför kan inga typer bestå efter kompilering.

Om du skriver din ansökan i TS, kommer kompilatorn att kontrollera att det du gör är typesäkert så att saker och ting bör fungera vid körning. (Även om du även i TS-kod kan bryta typesäkerheten och göra osäkra saker med any och typförklaringar)

Svar #2

JavaScript är ett dynamiskt typat språk. Det kommer att konvertera typerna efter behov - se typkonvertering.

Om du verkligen vill vara säker på att en viss typ används i din funktion måste du kontrollera det i din kod.
Till exempel:

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

Tänk på att detta bara är ett exempel.
Om du försöker skicka en var x=new Number(42) till funktionen kommer det ändå att kasta ett fel eftersom typeof x är object.
Så du måste vara extra försiktig när du gör den här typen av kontroller.