13.typescript筆記_類型保護

1 . 類型保護
//TypeScript 能夠在特定的區塊中保證變量屬於某種確定的類型
//可以做此區塊中放心的引用次類型的屬性,或者調用此類型的方法

enum Type {Strong , Week};

class Java {
    helloJava(){
        console.log('Hello Java');
    }
    java : string;
}

class JavaScript {
    helloJavaScript(){
        console.log('hello Jvascript');
    }
    J
function getLanguage(type : Type ,x ? : string | number){
    //隱式轉換 //let lan: Java | JavaScript
    let lan = type === Type.Strong ? new Java() : new JavaScript();
    return lan;
}

1.1 這裏我們想執行lan的方法,必須使用類型斷言進行判斷

function getLanguage(type : Type ,x ? : string | number){
    //隱式轉換 //let lan: Java | JavaScript
    let lan = type === Type.Strong ? new Java() : new JavaScript();
    return lan;
    
    if((lan as Java).helloJava){
        (lan as Java).helloJava();
    }else{
        (lan as JavaScript).helloJavaScript();
    }
}

上面的方法感覺有些繁瑣

那麼接下來學習更巧妙的方法

1.2 以下4個方法都是爲了類型保護機制,在某個特定的區塊中,保證變量是某種類型

1.2.1 可以使用instanceof進行判斷,不需要使用類型斷言

function getLanguage(type : Type ,x ? : string | number){
    //隱式轉換 //let lan: Java | JavaScript
    let lan = type === Type.Strong ? new Java() : new JavaScript();
  
    //可以使用instanceof進行判斷,不需要使用類型斷言
    //instanceof 用來判斷是否屬於某類的實例
    if(lan instanceof Java){
        lan.helloJava();
    }else{
        lan.helloJavaScript();
    }
    
   return lan;
}
getLanguage(Type.Strong);

1.2.2 in 判斷某個屬性是否屬於某個對象

enum Type {Strong , Week};
//對參數進行改造
class Java {
    helloJava(){
        console.log('Hello Java');
    }
    java : string;
}

class JavaScript {
    helloJavaScript(){
        console.log('hello Jvascript');
    }
    JavaScript : string;
}

function getLanguage(type : Type ,x ? : string | number){
    //隱式轉換 //let lan: Java | JavaScript
    let lan = type === Type.Strong ? new Java() : new JavaScript();
    
   //判斷某個屬性是否屬於某個對象
    if("java" in lan) {
        lan.helloJava();
    } else {
        lan.helloJavaScript();
    }

    return lan;
}
getLanguage(Type.Strong);

1.2.3 typeof

enum Type {Strong , Week};
class Java {
    helloJava(){
        console.log('Hello Java');
    }
    java : string;
}

class JavaScript {
    helloJavaScript(){
        console.log('hello Jvascript');
    }
    JavaScript : string;
}

function getLanguage(type : Type ,x ? : string | number){
    //隱式轉換 //let lan: Java | JavaScript
    let lan = type === Type.Strong ? new Java() : new JavaScript();
  
    if(typeof x === "string"){
        x.length;
    }else{
        x.toExponential();
    }
    
   return lan;
}
getLanguage(Type.Strong);

1.2.4 類型謂詞方法

enum Type {Strong , Week};
class Java {
    helloJava(){
        console.log('Hello Java');
    }
    java : string;
}

class JavaScript {
    helloJavaScript(){
        console.log('hello Jvascript');
    }
    JavaScript : string;
}

//新增了一個函數
function isJava(lang : Java | JavaScript) : lang is Java {
    return (lang as Java).helloJava !== undefined;
}

function getLanguage(type : Type ,x ? : string | number){
    //隱式轉換 //let lan: Java | JavaScript
    let lan = type === Type.Strong ? new Java() : new JavaScript();
  
    //類型謂詞方法
    if(isJava(lan)){
        lan.helloJava();
    }else{
        lan.helloJavaScript();
    }
   return lan;
}

getLanguage(Type.Strong);
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章