关于javascript:“ as”关键字有什么作用?

您所在的位置:网站首页 js中pre是什么意思 关于javascript:“ as”关键字有什么作用?

关于javascript:“ as”关键字有什么作用?

2024-07-12 15:13| 来源: 网络整理| 查看: 265

123if (process.env.NODE_ENV !== 'production') {     (WithUser as any).displayName = wrapDisplayName(Component, 'withUser'); }

我不确定as是否是关键字。 但是as关键字在Javascript中有什么作用?

相关讨论 类型断言与TypeScript中较新的`as`运算符之间是否可能存在任何重复? 与Typescript中使用的类型断言表达式一样 打字稿可能重复。 这是什么意思:

那不是普通的JavaScript,而是TypeScript。以任何方式将类型化的对象视为普通的未类型化的JavaScrpt对象。

as关键字是TypeScript中的类型断言,它告诉编译器将对象视为不同于编译器推断为对象的类型的另一种类型。

相关讨论 如果中断失败,请告诉as做什么。 是否会引发错误或异常? 没有。 告诉编译器将对象视为不同于其推断的类型,这纯粹是一种编译器概念。 实际运行的已编译JavaScript没有类型的概念。 运行的代码将基于编译的JavaScript引发错误和异常。 您能否链接您引用的任何TypeScript文档或可以支持该答案的文档? 有时,当某些对象没有确切类型时,此" as"仅是ts应用程序中的解决方案。

它是TypeScript,而不是普通的JS,但对于as本身:它称为Type Assertion,您只是在告诉编译器将某些内容视为类型:

12var a = 'TEST STRING' var b = a as string; //Means the compiler will assume it's a string

等效于:

12var a = 'TEST STRING' var b = a;

但是,使用JSX(带有html标签的JS)时,可能会造成混淆 ,因此在这些情况下,首选as语法。

这种类型断言是无用的,因为

123function foo (a: string, b: string): number {     return (a as number) + (b as number) }

简单地转换为

123function foo(a, b) {     return a + b; }

我首先希望它像

12345function foo(a, b) {     if (typeof a != 'string') throw ...     if (typeof b != 'string') throw ...     return Number(a) + Number(b) }

但不是。 TS给用户带来了错误的安全感。

相关讨论 那可能是因为运算符+对字符串也有效,如果在签名处将字符串更改为布尔值,则结果代码相同,但是会出现编译器错误。 一旦了解了现状,那么就不会真正存在"错误的安全感"。

这是一个Typescript运算符,在ECMAScript 2015(Javascript的最新版本)中不可用

如上述答案所示," as"运算符是类型声明的一种形式

举一个简短的例子,假设您有两种类型:第一和第二。您正在编写一个方法,但该方法并不完全知道您的对象属于哪种类型。它的类型可以是First或Second。

因此,您声明的变量没有严格的类型。一旦您的方法知道了变量应采用的类型,就可以"按该类型"返回它。

这似乎有点模糊和模棱两可,但是" as"运算符实际上执行的功能与另一个(更熟悉的)模式完全相同:

这两个代码段完全相同

12    let accountCode = '123;     let castedAccountCode = accountCode; 12    let accountCode = '123';     let castedAccountCode = accountCode as number;



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3