類型注解和類型推斷

類型注解 type annotation, 就是我們來(lái)告訴TS變量是什么類型
let count: number;
count = 123;
type inference 類型推斷, 就是TS會(huì)自動(dòng)的去嘗試分析變量的類型
image.png
如果TS能夠自動(dòng)分析變量類型,我們就什么也不需要做了;如果TS無(wú)法分析變量類型的話,我們就需要使用類型注解;
  • 當(dāng)我們定義一個(gè)常量a為1的時(shí)候,TS不單把類型推斷出來(lái),而且值也確定了,因?yàn)閍是常量,不會(huì)變化。


    image.png
  • 這里有一點(diǎn)要注意,那就是如果把變量的聲明和賦值放在兩行,TS就不能幫我們做出類型推斷了。需要手動(dòng)的進(jìn)行類型注解。


    image.png

    image.png
  • 下邊這種情況,TS就無(wú)法推斷參數(shù)的類型了,需要我們給他添加類型注解
function getTotal(firstNumber, secondNumber) {
  return firstNumber + secondNumber;
}

// 我們?cè)谡{(diào)用getTotal的時(shí)候,有可能傳數(shù)字,也有可能傳字符串等其他類型的參數(shù),所以firstNumber,secondNumber類型無(wú)法推斷
const total = getTotal(1, 2);

function getTotal(firstNumber:number, secondNumber:number) {;
  return firstNumber + secondNumber;
};

// 當(dāng)確定了firstNumber,secondNumber都是number類型以后,TS就可以推斷total的類型了,就不需要再給他添加類型注解了
TS實(shí)際上,就是讓代碼里所有的變量或?qū)傩陨隙加幸粋€(gè)具體的類型。

其他case

// 此時(shí)newData 也是需要我們寫(xiě)類型注解,
// 因?yàn)?JSON.parse返回的內(nèi)容,并不能幫助TS推斷出newData 的類型。
const rawData = '{"name":"yang"}';
const newData = JSON.parse(rawData);

//此時(shí)不得不給newData 通過(guò)類型注解的方式聲明一些類型
interface Person {
  name:string
}

const rawData = '{"name":"yang"}';
const newData:Person = JSON.parse(rawData);

如果一個(gè)變量,有可能是number,也有可能是string怎么辦呢?
let temp: number | string = 123;
temp = '456';
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容