如何進行類型檢查
時候用 :
let name:string = '13'
let nums: number[] = [1] // 每一項爲 number 的數組
let nums: Array<number> = [1] // 每一項爲 number 的數組
function sum(a: number, b:number): number{
return a + b
}
f2 重命名,因爲有類型檢查,所以可以一次性重命名。
f12 調轉到定義。
ts 有智能類型推到,有時候我們沒有寫類型的時候。
ts 支持哪些基本類型
-
number: 小寫,數字
-
boolean: 小寫,布爾
-
string: 小寫,字符串
-
number[] 或者 Array: 數組,number 只是個例子,可以改成其他類型,表示某種類型的數組
-
object: 對象
-
null 和 undefined: 是所有其他類型的子類型,可以賦值給其他類型。爲了更加嚴格的空類型價差,通過在配置文件中添加,
strictNullChecks: true
, 這樣它們就只能賦值給自生了。 -
聯合類型:
let name: string | undefined = undefined
。相當於或。可以使用 typeof 判斷類型
let name: string | undefined = undefined
if(typeof name === "string") { // 類型保護. 觸發類型保護的方式有很多,typeof 算一種
}
- void 類型: 通常用來表示函數沒有任何返回值
- never 類型: 通常用於約束函數的返回值,表示函數永遠不能能結束
function throwError(msg: string):never {
throw new Error(msg)
console.log('xxx')
}
function whileTest() {
while(true) {
}
}
- 字面量類型: 表示使用一個值進行約束
let a:"A"
表示 a 只能爲 ”A“,不能改變
let a:"A"
let gender: "boy" | "girl"
let arr: [] // 永遠只能是一個空數組
let user: { // user 只能是這種類型, 裏面會包含 name 和 age
name: string,
age: number
}
- 元祖類型 (Tuple):一個固定長度的數組,並且數組中每一項的類型確定
let tu: [string, number] // 只能有兩項
- any 類型:可以繞過類型檢查,可以賦值給任意類型
類型別名
對已知的一些類型定義名稱
type Gender = "nan" | "nu"
type user: {
name: string,
age: number,
gender: Gender
}
let u: user
function getUsers(g: Gender):User[] {
return []
}
函數相關的約束
// 函數重載
// 約束了之後,只會有這兩種情況
function combine(a:number, b:number):number
function combine(a:string, b:string):string
function combine(a: number | string, b:number | string): number | string {
if(typeof a === "number" && typeof b === "number") {
return a * b
}
if(typeof a === "string" && typeof b === "string") {
return a + b
}
}
// 可選參數。加一個 ? 表示可加這個參數可不加這個參數。只能寫在參數末尾
function sum(a:number, b:number, c?:number){}
// 默認參數
function sum(a:number, b:number, c:number = 0){}