TS类型缩小
当形参可以接受多种类型时,就需要对传入数据的类型进行检测
typeof xxx === 'xxx’叫做类型守护,表示判断某个变量是否属于某种类型,而且不用担心类型不符合等错误,TS已经智能的为我们处理好了这些问题
function miniType(str: number|string){
if(typeof str === 'number'){
console.log(new Array(str))
}else if(typeof str === 'string'){
console.log(str)
}
}
TS真值缩小
真值:即除了0 null undefined 0n 这些假值以外的所有值
真值缩小是为了精确定位传入值的数据类型,如下代码所示,对于传入的strs变量,我们仅仅判断它是一个object是不够的,因为null也是一个object对象,这很明显扰乱我们代码逻辑
此时我们在判定条件前面加上 strs && 即可执行真值缩小,代码逻辑变成:该变量类型为object且同时为真值(非null)才成立
function trueNarrow1(strs: string | string[] | null) {
if(strs && typeof strs === 'object'){
for(const s of strs){
console.log(s)
}
}
}
TS等值缩小
使用 === 或者 !== 则表示严格的等于或者不等于机制
- 上部分代码因形参都具有string类型,那么使用===表示当且仅当俩变量类型都是string的才执行代码
- 下部分代码表示当他不等于null时才执行(特别注意他只针对null这个空值进行判断,因为它是严格的)
// ===符号
function equalNarrow1(s1: string | undefined, s2: string | number) {
if(s1===s2){
console.log(s1+s2)
}
}
// !==符号
function equalNarrow2(s3: number|null){
if(s3!==null){
// ....
}
}
使用!=来表示宽松的不等于机制
所谓宽松的,即指它是否定一类而不是单个类型,譬如null和undefined都属于同一类(无意义字符),所以我们只需要令变量 !=null 就可以包含 !=undefined 等多种状况
// !=宽松机制
function equalNarrow3(s4: string|null|undefined){
if(s4

最低0.47元/天 解锁文章
1132

被折叠的 条评论
为什么被折叠?



