美文网首页前端开发那些事儿
类型断言与类型守卫

类型断言与类型守卫

作者: 深度剖析JavaScript | 来源:发表于2020-11-01 17:31 被阅读0次

先来看个例子

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);
}

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

相关文章

  • 类型断言与类型守卫

    先来看个例子 如上,showUser函数执行传递的参数是符合类型要求的。但是如果不符合要求的参数就会报错 正常编写...

  • typescript修炼指南(三)

    大纲 本章主要讲解一些ts的高级用法,涉及以下内容: 类型断言与类型守卫 in关键词和is关键词 类型结构 装饰器...

  • 聊聊golang的类型断言

    序 本文主要研究一下golang的类型断言 类型断言 断言x不为nil且x为T类型 如果T不是接口类型,则该断言x...

  • TypeScript入门基础(类型断言、内置对象)

    类型断言 类型断言(Type Assertion)可以用来手动指定一个值的类型。语法 <类型>值 或 值 as 类...

  • typescript -- 类型断言,类型推断与类型保护

    类型断言 类型断言用于清楚地知道一个实体具有比它现有类型更确切的类型,其实就是在使用时(而非定义时)手动指定变量类...

  • TS基础(八)类型断言

    类型断言可以用来手动指定一个值得类型语法 :值 as 类型 或者<类型>值在tsx中必须使用 前者 类型断言用途 ...

  • 类型断言

    类型断言可以用来手动指定一个值的类型,即允许变量从一种类型更改为另一种类型

  • 类型断言

    类型断言用于指定更具体的类型:比如: 以上代码对于 ts 来说它只知道 the_canvas_element 变量...

  • flow中文文档(十)

    类型转换表达式 类型断言 铸造类型 类型铸造 类型转换表达式 有时候,断言类型而不用函数或变量这样做是有用的。对于...

  • TypeScript类型缩小

    TypeScript类型缩小 类型缩小实例: 缩小后: typeof类型守卫

网友评论

    本文标题:类型断言与类型守卫

    本文链接:https://www.haomeiwen.com/subject/obquvktx.html