Typescript 學習筆記 - Section 4

發佈時間

Section Overview#

這章節主要會介紹 Type Annotation 跟 Type Inference 在 function 上的使用

Type Annotation around functions#

Type Annotation - 我們告訴 Typescript function 的參數 type 是什麼,以及回傳值的 type Type Inference - Typescript 主動去判斷回傳值的 type 是什麼

Examples#

const add = (a: number, b: number): number => { return a + b; };

Type Inference around functions#

const add = (a: number, b: number): number => { // typescript will throw error return '123123'; }; const add = (a: number, b: number): number => { // typescript只關心type,並不管functino內的邏輯是否正確 return a - b; };

在任何情況下我們都要 annotate 參數 type 是什麼,以及回傳值的 type 是什麼,原因如下

const subtract = (a: number, b: number) => { // typescript 認為這function沒任何回傳值,所以回傳值的type是void,實際上是因為程式碼錯誤漏寫return而已 // 所以須加上回傳值的type,讓typescript提示我們哪邊有錯誤 a - b; };

More Examples#

function divide(a: number, b: number): number { return a / b; } const multiply = function (a: number, b: number): number { return a * b; };

Void and Never#

const logger = (message: string): void => { console.log(message); }; const throwError = (message: string): never => { throw new Error(message); }; // rewrite const throwError = (message: string): string => { if (!message) { throw new Error(message); } return message; };

Destructuring with Annotations#

const todaysWeather = { date: new Date(), weather: 'sunny', }; const logWeather = ({ date, weather, }: { date: Date; weather: string; }): void => { console.log(forecast.date); console.log(forecast.weather); }; logWeather(todaysWeather);

Annotations Around Objects#

const profile = { name: 'alex', age: 20, coords: { lat: 0, lng: 15, }, setAge(age: number): void { this.age = age; }, }; const { age, name }: { age: number; name: string } = profile; const { coords: { lat, lng }, }: { coords: { lat: number; lng: number } } = profile;