美文网首页
TS基础(八)类型断言

TS基础(八)类型断言

作者: Viewwei | 来源:发表于2020-12-23 10:21 被阅读0次

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

类型断言用途

讲一个联合类型断言为其中一个类型
interface Cat {
    name: string;
    run(): void;
}
interface Fish {
    name: string;
    swim(): void;
}

function isFish(animal: Cat | Fish) {
//这里讲animal 断言成Fish对象 强制类型转换,运行报错
    if (typeof (animal as Fish).swim === 'function') {
        return true;
    }
    return false;
}

注意:类型断言只是欺骗编译器,让编译器可以编译通过,但是如果强制类型转换,在执行的过程中回报错

将父类断言成子类

当一个类存在继承关系的时候,父类可以断言成更加具体的子类

class ApiError extends Error {
    code: number = 0;
}
class HttpError extends Error {
    statusCode: number = 200;
}

function isApiError(error: Error) {
    if (typeof (error as ApiError).code === 'number') {
        return true;
    }
    return false;
}

注意:当类型是一个接口的时候不能使用typeof 来判断类型。因为类型不是一个真正的值,在编译结果中是会被删除的。如果类型为一个接口的时候,可以使用类型的是否存在某个属性来判断它的类型来判断是什么类型

interface ApiError extends Error {
    code: number;
}
interface HttpError extends Error {
    statusCode: number;
}

function isApiError(error: Error) {
    if (typeof (error as ApiError).code === 'number') {
        return true;
    }
    return false;
}

可以将任意类型的断言成any类型

总结:

1 联合类型可以被断言成其中一个类型
2 父类可以断言成子类
3 任何类型可以断言成any
4 any 可以断言成任何类型

自我领悟:

函数的参数为接口类型的时候,有点特殊情况,函数的参数支持协变。协变不用关注对象的类型,只需要关心对象的参数。比如下面例子

interface a {
        a:number,
        c:number
    }
    interface b {
        a:number
    }
    function fnc (params1:a):void{
        console.log(params1.a)
    }
    let A:a = {
        a:10,
        c:20
    }
    let B:b = {
        a:10
    }
    fnc(B as a);

但是对于赋值来说,上面情况不满足

相关文章

  • TS基础(八)类型断言

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

  • TypeScript类型补充二(四)

    1. 类型断言as 2.非空类型断言! 3.可选链的使用 非空类型断言帮我们逃过了TS对他的检查,但是本质上来说的...

  • TypeScript 之 类型推断 类型兼容 类型保护

    类型推断 ts会自动推断写的代码是什么类型 当你不需要ts自动推断类型的时候 需要用到类型断言 最佳通过类型推断 ...

  • 2021-01-28

    一:ts初步了解 基础类型 ts的基础类型中有如下几种:boolean/number/string/object/...

  • 白话文:几个例子马上看懂typescript基础类型

    TS入门:基础类型

  • TypeScript02--基础数据类型与接口

    基础数据类型: 1.ts的基础数据类型: ts相比js新增的数据类型:元组,any,void,neve...

  • (ts-04)ts类型断言使用

    类型断言就是我们自己确认了类型,告诉编译器当前类型是什么 经常在开发时遇到某字段明明知道类型,却无法使用该类型的方...

  • 类型断言

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

  • Typescript类型断言

    类型断言 TS 类型断言定义:把两种 有重叠关系的 数据类型 进行相互转换,把其中一种数据类型 转换成 另外一种数...

  • TypeScript 07 - 类型推断

    基础 最佳通用类型 上下文类型 1. 基础 在 TS 中未明确指出类型的地方,TS 会帮助提供类型,当初始化变量和...

网友评论

      本文标题:TS基础(八)类型断言

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