《TypeScript实战指南》—2.1.3 变量声明

举报
华章计算机 发表于 2019/06/16 11:18:39 2019/06/16
【摘要】 本节书摘来自华章计算机《TypeScript实战指南》一书中的第2章,第2.1.3节,作者是胡桓铭。

2.1.3 变量声明

let和const是ES 6中新增的变量声明方式。在 TypeScript 中,let和const的使用方式与 ES 6 中一模一样,在本书中也推荐使用 let 和 const 进行赋值,并不推荐使用 var 去进行赋值。var 声明有很多怪异的地方,有兴趣的读者可以自行了解。

回到变量声明,即便不指定类型,TypeScript 依旧可以根据指定的变量进行类型推断,比如:

let name = `xiaoming`;

// let a: string

 

const age = 5

// const age: 5

如果这个时候为 name 赋值 1,则会得到一个报错信息:

let name = `xiaoming`;

name = 1

// error TS2322: Type '1' is not assignable to type 'string'.

从这个例子可以得出,如果在初始化阶段已经声明了该变量类型,在中途更改,会触发TypeScript的编译时报错。这个编译时报错为我们带来了严格的类型检查。

但常常我们会遇到另外一种情况,你会比TypeScript更了解这个值的类型。这样的情况经常发生,你会清楚地知道编译器的类型推断不太确切,应该有更准确的类型。

而通过类型断言,我们可以明确地告知编译器,我们究竟想干什么。这是一种修正方案,在别的语言里,我们将会使用类型转换来表达这样一种情况。

但这个操作并不会在运行时里起到任何影响,正如TypeScript的宣言一样,它仅仅在编译时起作用。这非常像Word的语法检查,是提醒和报错,而不会阻挡你继续写字。

类型断言分作两种形式,第一种用“尖括号”:

let oneString: any = "this is a string";

let stringLength: number = (<string>oneString).length;

这也是大部分编程语言中常用的语法形式。

而另外一种则使用关键字 as:

let oneString: any = "this is a string";

let stringLength: number = (stringLength as string).length;

两种形式是等效的,至于具体使用哪一种,则取决于个人的偏好。

不过值得注意的是,在 TypeScript 的 JSX中类型断言可以使用 as,而不允许使用尖括号方式。如果非要有什么原因的话,大概是由于尖括号在 JSX 中已经用于表达泛型了。


【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。