非运算符 (!) 在 TypeScript 中的行为是否不同?

Is the not operator (!) behaving differently in TypeScript?

以下值在 JavaScript 中被视为 "falsy":

TypeScript 处理非运算符 (!) 的方式不同还是相同?

Typescript 的 design goals 之一是:

Preserve runtime behavior of all JavaScript code.

这意味着所有 Javascript 代码在 Typescript 代码中的行为相同。没有例外。您可能会遇到额外的语义错误,但如果您忽略这些错误,行为仍然相同。

因此,如果您想知道 ! 这样的运算符在 TS 中的行为是否不同,答案永远是否定的

根据定义,发出的 JavaScript 与 JavaScript 的工作方式相同。

至于编译器在设计时将哪些类型识别为 falsy,简短的回答是 "everything except NaN":

const f0 = !false  // true
const f1 = !0; // true
const f2 = !0n; // true
const f3 = !""; // true
const f4 = !null; // true
const f5 = !undefined; // true
const f6 = !NaN; // boolean (no NaN type in TypeScript)

现在 TypeScript 没有 numeric literal type corresponding to NaN; it's only seen as type number. And since a number can be either truthy or falsy, the type of !NaN is just boolean. There is an open suggestion, microsoft/TypeScript#28682 来为 NaN(以及 Infinity-Infinity)引入数字文字,但我不知道是否这将永远得到解决。

好的,希望对你有帮助;祝你好运!

Playground link to code

TypeScript 是 JavaScript 的超集。

Typescript 仅向 JavaScript 添加了额外的功能。 它不会否定 JavaScript.

的任何特性或功能

JavaScript 中的错误在 TypeScript 中也是错误的。 在 JavaScript 中是正确的,在 TypeScript 中也是正确的。