编辑
2023-03-25
TypeScript
0
请注意,本文编写于 532 天前,最后修改于 515 天前,其中某些信息可能已经过时。

目录

类型推论
说明
分类
类型断言
说明
类型断言的两种形式
1. 使用一对尖括号进行类型断言
2. 使用as进行类型断言
注意点
非空断言
说明
注意
确定赋值断言
说明
Eg
类型拓宽
说明
Eg
类型缩小
说明

类型推论

说明

不需要指定变量(函数的返回值)类型,ts会自动推断出一个类型

分类

  • 基础类型推断 从右向左的推断
    比如一个变量定义的时候没有赋值,不管之后有没有赋值,都会被推断成 any 类型而完全不被类型检查

  • 最佳通用类型推断 从右向左的推断
    需要从几个表达式中推断类型时候,会使用这些表达式的类型来推断出一个最合适的通用类型
    最佳类型推断和最佳通用类型推断

  • 上下文类型推断 从左向右的推断
    通常发生在事件处理中

ts
//根据左侧的时间属性推断右侧event的类型 window.onkeydown = function(event) { console.log(event.clientX) //error }

类型断言

说明

开发人员通过类型断言的方式告诉编译器元素类型

类型断言的两种形式

1. 使用一对尖括号进行类型断言

ts
// 类型断言 let str1:any="this is a string" let str1num:number=(<string>str1).length console.log(str1num)

尖括号写法会与JSX冲突,react中只有as语法断言是被允许的

2. 使用as进行类型断言

ts
//定义一个接口作为类型 其中包含name属性 interface userInfoInterface { name:string } //类型断言 //let userInfo = {} as userInfoInterface //userInfo.name = "xiao" /* 不推荐上述写法,在上述写法中若userInfo.name未赋值,TS也不会报错 */ let userInfo:userInfoInterface = { name:"小明" }

注意点

没有任何根据的类型断言会造成安全隐患

非空断言

说明

在上下文中当类型检查器无法断定类型时,一个新的后缀表达式操作符!可以用于断言操作对象是非null和非undefined类型

非空断言

注意

编译后可能还会出现undefined类型

确定赋值断言

说明

在实例属性和变量声明后面放置一个 ! 号,从而告诉TS该属性会被明确地赋值

Eg

确定赋值断言

类型拓宽

说明

所有通过let或var定义的变量、函数的形参、对象的非只读属性,如果满足指定了初始值且未显式添加类型注解的条件,那么它们推断出来的类型就是指定的初始值字面量类型拓宽后的类型

Eg

ts
let str = 'this is string'; // 类型是 string let strFun = (str = 'this is string') => str; // 类型是 (str?: string) => string; const specifiedStr = 'this is string'; // 类型是 'this is string' let str2 = specifiedStr; // 类型是 'string' let strFun2 = (str = specifiedStr) => str; // 类型是 (str?: string) => string;

类型拓宽

通过let、var 定义的变量如果满足未显式声明类型注解且被赋予了null或undefined值,则推断出这些变量的类型是any

类型缩小

说明

在TS中,可以通过某些操作将变量的类型由一个较为宽泛的集合缩小到相对较小、较明确的集合

本文作者:RKLS

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!