为什么在 TypeScript 中使用“as”?

问题描述 投票:0回答:1

如果不改变类型,为什么要使用

as
?我错过了什么?

在第一个例子中,尽管我说它是一个字符串,但我得到了 4。第二个 22 号,即使我说的是数字。

let num1: unknown = 2;
let sum: number = (num1 as string) + 2;
console.log("as string: ", sum); // 4

let num2: unknown = '2';
let sum: number = (num2 as number) + 2;
console.log("as number: ", sum); // 22

https://jsfiddle.net/yb549u3g/

typescript
1个回答
0
投票

Typescript 是一种静态分析代码以防止错误并使代码更安全的工具。我邀请您阅读TypeScript 为何存在?

正如我所说,它静态地分析你的代码,这意味着 TypeScript 不会在运行时运行:事实上,你的 TypeScript 代码将被构建到 JavaScript 代码中(通常在

/dist
文件夹中),并且你的消费者只会使用JavaScript 代码。

让我们分析一下您所呈现的场景:

let num1: unknown = 2;
let sum: number = (num1 as string) + 2;
console.log("as string: ", sum);

在这里,TypeScript 不会抛出任何错误,因为你可以执行

string + number
(JavaScript 会自动将数字转换为字符串并将其附加到你的第一个),所以如果你 cas
num1 as string
,TypeScript 会认为
num 
类似于
22

但如果你看一下编译后的代码,你会发现类似的东西

let num1 = 2;
let sum = num1 + 2;
console.log("as string: ", sum);

您可以轻松预测控制台将打印

4

这种不匹配是由于您的

as
转换操作造成的,即告诉编译器“不要担心您的预测,我知道
num1
string
”,这是一个强大的工具。这是一个完美的例子,向您展示只有当您确实确定您的断言正确时才应该使用
as
,否则您可能会欺骗 TypeScript 的编译器,它会破坏您项目的类型安全性,以及使用的全部目的TypeScript 位居第一。

© www.soinside.com 2019 - 2024. All rights reserved.