切换主题
类型断言(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
贡献者
sunchengzhi