《TypeScript实战指南》—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 中已经用于表达泛型了。
- 点赞
- 收藏
- 关注作者
评论(0)