Skip to content

类型断言(Type Assertion)

类型断言的目的是告诉编译器--你比它更了解这个类型,而且它不应该再发出错误

类型断言

字数
843 字
阅读时间
4 分钟

类型断言(Type Assertion)可以用来手动指定一个值的类型。

语法§

ts
 as 类型

ts
<类型>

在 tsx 语法(React 的 jsx 语法的 ts 版)中必须使用前者,即 值 as 类型

形如 <Foo> 的语法在 tsx 中表示的是一个 ReactNode,在 ts 中除了表示类型断言之外,也可能是表示一个泛型

故建议大家在使用类型断言时,统一使用 值 as 类型 这样的语法,本书中也会贯彻这一思想。 222

类型断言的用途§

![[类型断言 · TypeScript 入门教程.html]]

类型断言的常见用途有以下几种:

将一个联合类型断言为其中一个类型§

将一个父类断言为更加具体的子类§

将任何一个类型断言为 any§

将 any 断言为一个具体的类型§

类型断言的限制§

类型推断

当类型没有给出时,TypeScript 编译器利用类型推断来推断类型。

如果由于缺乏声明而不能推断出类型,那么它的类型被视作默认的动态 any 类型。

var num = 2;    // 类型推断为 number
console.log("num 变量的值为 "+num); 
num = "12";    // 编译错误
console.log(num);
  • 第一行代码声明了变量 num 并=设置初始值为 2。 注意变量声明没有指定类型。因此,程序使用类型推断来确定变量的数据类型,第一次赋值为 2,num 设置为 number 类型。

  • 第三行代码,当我们再次为变量设置字符串类型的值时,这时编译会错误。因为变量已经设置为了 number 类型。

    error TS2322: Type '"12"' is not assignable to type 'number'.

特殊形式的类型断言

https://www.runoob.com/typescript/ts-variables.html 类型断言可以用来手动指定一个值的类型,即允许变量从一种类型更改为另一种类型。

语法格式:

<类型>值

或:

值 as 类型

实例

var str = '1' 
var str2:number = <number> <any> str //str、str2 是 string 类型 
console.log(str2)

TypeScript 是怎么确定单个断言是否足够

当 S 类型是 T 类型的子集,或者 T 类型是 S 类型的子集时,S 能被成功断言成 T。这是为了在进行类型断言时提供额外的安全性,完全毫无根据的断言是危险的,如果你想这么做,你可以使用 any。

它之所以不被称为类型转换,是因为转换通常意味着某种运行时的支持。但是,类型断言纯粹是一个编译时语法,同时,它也是一种为编译器提供关于如何分析代码的方法。

编译后,以上代码会生成如下 JavaScript 代码:

var str = '1';
var str2 = str;  //str、str2 是 string 类型
console.log(str2);

执行输出结果为:

1


D:\BaiduNetdiskDownload\wenjuan\react-question-code-master\react-question-code\wenjuan-fe\src\hooks\useGetComponentInfo.ts中使用useSelector时

tsx
  const components = useSelector<StateType>(

    state => state.components.present

  ) as ComponentsStateType

贡献者

The avatar of contributor named as sunchengzhi sunchengzhi

文件历史

撰写