TypeScript(三)断言

388 阅读1分钟

断言

有些情况下,变量的类型对于我们来说是很明确,但是TS编译器却并不清楚,此时,可以通过类型断言来告诉编译器变量的类型,断言有两种形式:

第一种

const someValueunknown = "this is a string";
const strLengthnumber = (someValue as string).length;

第二种

const someValueunknown = "this is a string";
const strLengthnumber = (<string>someValue).length;

小结

断言的语法为 <类型名> xxxxxx as 类型名。推荐始终用as语法,因为第一种语法无法在tsx文件使用,而且容易和泛型混淆。一般只有这几种场景需要使用类型转换:自动推断不准;TS报错,想不出更好的类型编写方法。

在使用断言进行类型转换时,应该遵守几个原则:

  • 若要放松限制,只可放松到能运行的最严格类型上
  • 如果不知道一个变量的精确类型,只标注到大概类型(例如 any[])也比 any 好
  • 任何一段 “放飞自我”(完全没有类型覆盖)区代码不应超过 2 行,应在出现第一个可以确定类型的变量时就补上标注

!断言

! 的作用是断言某个变量不会是null/undefined,告诉编译器停止报错。这里由用户确保断言的正确。 它和刚刚进入 EcmaScript语法提案 stage 3的 Optional Chaining 特殊不同。Optional Chaining特性可 以保证访问的安全性,即使在 undefined 上访问某个键也不会抛出异常。而,只是消除编译器报错,不会对运行时行为造成任何影响。

// TypeScript
mightBeUndefined!.a = 2
// 编译为
mightBeUndefined.a = 2

@ts-ignore用于忽略下一行的报错,尽量少用。