類型注解 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';


