Typescript筆記Part4: 類型斷言

Nydia Lin
Apr 25, 2023

--

TS是很好的輔助工具,但有時候過於嚴格的輔助了....當你發現你比TS更知道目前是什麼情況,就是斷言派上用場的時機,但斷言同時也屏蔽了編譯器對代碼的檢查,需要謹慎使用!

一般斷言

  • 尖括號语法: 在需要斷言的變數前加上 `<Type>` 即可
    *當使用 JSX 會造成衝突,建議使用as
    let foo: any;
    let bar = <string>foo; // 现在 bar 的类型是 ‘string’`


    - as语法
    let someValue: any = “this is a string”;
    let strLength: number = (someValue as string).length;

雙重斷言: 當使用類型斷言仍報錯

function handler(event: Event) {
const element = event as HTMLElement; // Error: 因為HTMLElement 不是 Event 的子类
}

先斷言成兼容所有類型的 any

function handler(event: Event) {
const element = (event as any) as HTMLElement; // ok
}

非空斷言

x! ⇒ 排除 null 和 undefined 的狀況

function handler (arg: string | null | undefined) { 
let str: string = arg!;
str.split('');
}

確定賦值斷言

//例 1
let x: number;
initialize();
console.log(x); // 編譯器報錯

//例 2
let y!: number; // 在變量 y 聲明後添加驚嘆號,告訴編譯器之後會賦值,避免報錯
initialize();
console.log(y);

參考文章:
https://jkchao.github.io/typescript-book-chinese/typings/typeAssertion.html#双重断言

--

--

Nydia Lin
Nydia Lin

Written by Nydia Lin

從餐廳、飯店到旅行社,從觀光人的職涯大轉換到前端領域,希望紀錄學習歷程,並鼓勵在同一條轉職路上努力的人!