前端开发那些事儿

类型断言与类型守卫

2020-11-01  本文已影响0人  深度剖析JavaScript

先来看个例子

type User = {
    name: string;
    age: number;
}
function showUser(user: User) {
    console.log(user.name);
    console.log(user.age);
}
showUser({ name: 'Alice', age: 12 })

如上,showUser函数执行传递的参数是符合类型要求的。但是如果不符合要求的参数就会报错

let errorType = '';
showUser(errorType); //错误

正常编写代码一般不会出这样的问题,但是这个数据有可能来自运行时的其他地方(比如数据库、第三方库、用户输入等)。
我们知道语言在运行时是不具有类型的,那我们在运行时如何保证和检测来自其他地方的数据也符合我们的要求呢?
这就类型断言要干的事

所谓断言就是断定、确定、绝对的意思;所以简单来讲,类型断言就是保证数据类型一定是所要求的类型

类型断言还需要借助类型守卫函数,类型守卫函数就是用于判断未知数据是不是所需类型

function isUser(arg: any): arg is User {
    if (!arg) {
        return false;
    }
    else {
        if (typeof arg.name == 'string' && typeof arg.age == 'number') {
            return true;
        } else {
            return false;
        }
    }
}

可以看到类型守卫函数与普通函数没多大区别,唯一需要注意其返回值类型比较特殊特殊,格式:x is y ,表示x是不是y类型

if (isUser(errorType)) {
    showUser(errorType);
}

经过这样的类型断言后就不会报错了
以上就是类型断言和类型守卫的基本使用

上一篇下一篇

猜你喜欢

热点阅读