美文网首页
类型断言

类型断言

作者: 苍老师的眼泪 | 来源:发表于2022-08-24 10:37 被阅读0次

    类型断言用于指定更具体的类型:
    比如:

    let the_canvas_element = document.getElementById('the_canvas_element')
    

    以上代码对于 ts 来说它只知道 the_canvas_element 变量是一个 Element 类型的元素或者 null。
    但是很显然在这种情况下我们知道该元素是一个 HTMLCanvasElement,于是我们可以通过类型断言指定更具体的元素:
    方法一:用 as + 更具体的类型

    let the_canvas_element = document.getElementById('the_canvas_element') as HTMLCanvasElement
    

    方法二:

    let the_canvas_element = <HTMLCanvasElement>document.getElementById('the_canvas_element')
    

    类型断言在编译时被删除,不会影响代码运行时行为.
    ts 只允许类型断言转化为更具体或更宽松的类型,这个规则可以防止不可能的强制类型转换.

    类型断言的实际使用场景:

    function request_data(url:string, method: 'GET' | 'POST') {
        console.log(url + method)
    }
    
    const obj = {
        url: 'http://backend.com',
        method: 'GET'
    }
    
    request_data(obj.url, obj.method)
    

    以上代码会提示:类型“string”的参数不能赋给类型“"GET" | "POST"”的参数。
    我们需要显示地告诉 ts: 虽然 obj.method 的类型的 string 类型的变量,但是我们很确定 method 的只会是 ‘GET' | 'POST' 之中的一个:

    method: 'GET' as 'GET' | 'POST'
    

    另一种方法:

    const obj = {
        url: 'http://backend.com',
        method: 'GET'
    } as const
    

    一个对象 as const 之后,它里面的属性(或属性的属性一直递归下去)不能修改了

    !非空断言:

    function show(n: number | null) {
        console.log(n!.toFixed(2))
    }
    
    show(20)
    

    当show的参数真的为 null 的时候,就会抛出运行时异常

    相关文章

      网友评论

          本文标题:类型断言

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