JS中的“ as”关键字有什么作用?

时间:2019-04-21 09:35:07

标签: javascript typescript

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

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

5 个答案:

答案 0 :(得分:6)

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

如上所述,“ as”运算符是类型声明

的一种形式

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

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

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

这两个代码段做的完全相同

    let accountCode = '123';
    let castedAccountCode = <number>accountCode;

用作关键字:

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

答案 1 :(得分:3)

那不是普通的JavaScript,而是TypeScript。无论如何,都应将类型化对象视为普通的未类型化JavaScrpt对象。

Caused by:org.springframework.transaction.TransactionSystemException: Could not commit JPA transaction; nested exception is javax.persistence.RollbackException: Error while committing the transaction 关键字是TypeScript中的类型声明,它告诉编译器将对象视为不同于编译器推断出的对象类型的另一种类型。

答案 2 :(得分:3)

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

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

简单地转换为

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

我首先希望它像

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

但没有。 TS给用户带来了错误的安全感。

答案 3 :(得分:1)

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

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

等效于此:

var a = 'TEST STRING'
var b = <string> a; 

但是在使用JSX(带有html标签的JS)时可能会感到困惑 ,因此在这种情况下,首选as语法

答案 4 :(得分:0)

如上答案指出原始问题代码中的单词 as 是 TypeScript 中的关键字,但作为补充,as 是 JavaScript 中的上下文关键字 - 当代码遇到语法时规则ImportClause