“as”关键字有啥作用?
Posted
技术标签:
【中文标题】“as”关键字有啥作用?【英文标题】:What does the "as" keyword do?“as”关键字有什么作用? 【发布时间】:2019-09-10 21:19:19 【问题描述】:if (process.env.NODE_ENV !== 'production')
(WithUser as any).displayName = wrapDisplayName(Component, 'withUser');
我什至不确定as
是否是关键字,但无论如何,它在 javascript 中的作用是什么?
【问题讨论】:
Any difference between type assertions and the newer `as` operator in TypeScript?的可能重复 'as' 是 Typescript 中使用的类型断言表达式 typescript. what is mean: (this as any)的可能重复 【参考方案1】:这不是普通的 JavaScript,而是 TypeScript。无论如何,将类型化对象视为普通的无类型 JavaScrpt 对象。
as
关键字是 Type Assertion in TypeScript,它告诉编译器将该对象视为另一种类型,而不是编译器推断的对象类型。
【讨论】:
如果断言失败,请告诉as
做什么。会抛出错误或异常吗?
没什么。告诉编译器将对象视为与其推断不同的类型,这纯粹是一个编译器概念。实际运行的编译后的 JavaScript 没有类型的概念。运行的代码会根据编译好的 JavaScript 抛出错误和异常。
能否请您链接您提到的或可以支持此答案的任何 TypeScript 文档?
有时这个“as”只是ts应用程序中的解决方案,当某些对象没有确切的类型时。
关于as
basarat.gitbook.io/typescript/type-system/type-assertion的文档【参考方案2】:
它是 TypeScript,不是 vanilla JS,而是 as
本身:它被称为 Type Assertion,你只是告诉编译器将某些东西视为一种类型:
var a = 'TEST STRING'
var b = a as string; //Means the compiler will assume it's a string
相当于这样:
var a = 'TEST STRING'
var b = <string> a;
但是在使用 JSX(带有 html 标签的 JS)时可能会造成混淆
,因此在这些情况下,首选 as
语法。
【讨论】:
var b = 'test' as string; 之间有什么区别吗?和 var b: string = 'test' ? @Embedded_Mugs 回答您的问题:***.com/questions/69220403/…【参考方案3】:这是一个 Typescript 运算符,它在 ECMAScript 2015(Javascript 的最新版本)中不可用
正如上面的答案所示,'as' 运算符是 Type Assertion
的一种形式举个简短的例子,假设您有两种类型:第一种和第二种。您正在编写一个方法,而该方法并不完全知道您的对象将属于哪种类型。它可以是 First 或 Second 类型。
因此,您声明了没有严格类型的变量。一旦您的方法知道您的变量应该采用的类型,您就可以将其“作为该类型”返回。
这似乎有点含糊不清,但“as”运算符实际上执行的功能与另一种(更熟悉的)模式完全相同:
这两个sn-ps的代码做完全相同的事情
let accountCode = '123';
let castedAccountCode = <number>accountCode;
作为关键字使用:
let accountCode = '123';
let castedAccountCode = accountCode as number;
【讨论】:
此代码生成:TS2352:将“字符串”类型转换为“数字”类型可能是错误的,因为这两种类型都没有充分重叠。如果这是故意的,请先将表达式转换为“未知”。 如果你知道你想要一个字符串中的一个数字,那么为什么不写这个呢?常量帐户代码 = '123'; const castedAccountCode: number = parseInt(accountCode, 10);【参考方案4】:这种类型断言是没用的,因为
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 给用户一种错误的安全感。
【讨论】:
这可能是因为运算符+对字符串也有效,如果你在签名处将'string'更改为'boolean',得到的代码是一样的,但是你会遇到编译错误。 一旦你理解了“原样”的意义,那么就真的没有“错误的安全感”了。as
用于帮助 typescript 在编译时检查类型,而不是在运行时进行类型强制。【参考方案5】:
如上答案指出原始问题代码中的单词as
是TypeScript中的关键字,但是作为补充,as
是JavaScript中的上下文关键字-当代码遇到语法规则时ImportClause
【讨论】:
以上是关于“as”关键字有啥作用?的主要内容,如果未能解决你的问题,请参考以下文章