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