typescript - 使用冒号和 as 语法来声明类型有什么区别?

标签 typescript

声明类型的:语法有什么区别

let serverMessage: UServerMessage = message;

as语法

let serverMessage = message as UServerMessage;

至少在这个例子中他们似乎产生了相同的结果

最佳答案

一个是类型注解,一个是类型断言。

类型注解告诉编译器检查赋值是否完全有效以及message确实与UServerMessage兼容

类型断言告诉编译器,我知道我在做什么,message 是一个 UServerMessage,不管你认为你知道什么,我有更多信息和我最清楚。即使您使用类型断言,某些检查仍会执行,因此您可能会看到双重断言 message as any as UServerMessage 例如,如果 message 的类型与 非常不兼容UServerMessage

您应该始终更喜欢类型注释而不是断言。谨慎使用断言,并且仅在必要时才使用。类型断言是把方钉插入圆孔的锤子,有时很有用,但您可能会再看看您在做什么,以确保它是正确的。确保它不是:

关于typescript - 使用冒号和 as 语法来声明类型有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54684886/

相关文章:

android - Nativescript命令gradlew.bat失败错误

reactjs - 如何配置 react 脚本,使其不会覆盖 'start' 上的 tsconfig.json

typescript - 如何在 NestJS 中设置类似 Angular 的配置环境文件?

Angular2向路由器url添加参数

angular - Material Angular 6 DatePicker 正在解析我 1 天前的日期

angularjs - 如何在 Typescript 中实现 $http?

javascript - 在文本输入中 react native 用户标签

knockout.js - 在 typescript 中声明一个 knockout 计算观察

javascript - react : passing parent state to child when the parent state is sourced and modified from external classes acting as a property in the parent

javascript - angular:调用 el.setAttribute 导致错误