基本宣告方式
函式本身的型別宣告可能在幾個地方發生,分別是參數跟回傳值:
function multiply(value1: number, value2: number): number{
return value1*value2
}
console.log(multiply(2,3)); //6
當然也可以像JS原本的宣告方式一樣,如此一來預設的類型會是Any,不過這樣使用TS就失去意義:
let myName:string = 'Moojing'
function returnMuyName (){
return myName;
}
函式型別
JS 裡面,我們可以把 function assign 給變數,但是 TypeScript 裡面想要啟用型別檢查,就一樣必須在變數後面聲明這個函式的型別,(包含參數和回傳值),但如果一個變數沒有任何型別的話,這個 function 的型別跟一般變數一樣會被設為 any ,所以可以傳入型別。
function sayHello():void{
console.log('Hello')
}
function multiply(value1:number,value2:number): number{
return value1*value2
}
let doSomeThing = sayHello;
let doSomeThing = multiply;
但是這樣一來我們就無法直觀的判斷這個變數的型別,畢竟使用TS就是要將他的優點發揮到極致,還記得之前我們提過變數型別的宣告嗎?我們可以這麼做:
let doSomeThing: (val1: number, val2: number)=>number;
doSomeThing = multiply;
doSomeThing = sayHello;// Type '() => void' is not assignable to type '(val1: number, val2: number) => number'.
這樣一來在assign錯誤的函式型別時,TS就能夠檢查出錯誤,不過這樣一來函式的宣告就變得有點的雜亂不易閱讀,這時我們可以使用 type 關鍵字把函式型別抽出來另外宣告:
type someType = (val1: number, val2: number)=>number;
物件型別
將物件assign給某變數,該變數的型別宣告方式,其實跟前面function型別的宣告方法差不多:
let userData : {name: string, age: number}= {
name: "Max",
age:27
}
宣告完物件型別之後,就不能再assign該物件型別裡沒有定義的property跟類型:
userData = {
a:'hello', //類型 '{ a: string; b: number; }' 不可指派給類型 '{ name: string; age: number; }'。
b:22
}