ts 類型
限定類型
- 變量限定類型
- 函數限定類型
- 函數參數限定類型
- 構造函數后面不需要給定類型(new以后得到對象)
- 枚舉類型、數組類型、元組類型、不限定類型
- never:無法返回的類型,比如死循環
- 限定數組元素對象類型,限定對象屬性類型
- 斷言類型
- undefined null
變量類型
//變量限定類型后不能改變變量值類型
var a: Number = 3;
函數類型
函數參數也必須給定類型
函數沒有返回值,定義void類型
//當前函數必須由返回值,且返回值必須是number類型
function getNum(): Number {
//任何變量都必須定義類型
let a: Number = 1;
return a;
}
//函數沒有返回值,定義void類型
function fn(): void { }
//函數參數也必須給定類型
function argType(a1: Number, a2: String) {
console.log(a1, a2)
}
argType(1, 2 + "");
數組、元組與枚舉
//數組類型,所有元素類型必須相同,不同的話可以用元組
//c語言寫法
let list: number[] = [1, 2]
//面向對象
let list2: Array<Number> = [1, 2, 3]
//元組Tuple,相比於數組,元組可以用不同類型
let tuple: [string, number, boolean] = ['a', 1, true]
//枚舉
enum STATUS { WALK = "walk", SWIM = "swim" }
console.log(STATUS.WALK)//walk
不限類型與無法返回的類型
//any 不確定的通用類型,進來不要使用
var notsure: any = 1;
//never 無法返回的類型,如死循環
限定數組的對象元素類型 限定對象的屬性類型
需要借用構造
//限定對象的屬性類型
class ItemVo {
id: number = 0
name: string = ""
price: number = 1
selected: boolean = false
constructor(_id: number, _name: string, _price: number, _selected: boolean) {
this.id = _id
this.name = _name
this.price = _price
this.selected = _selected
}
}
var objArr:Array<ItemVo>=[
new ItemVo(1001,'a',35,true),
new ItemVo(1002,'a',35,true),
new ItemVo(1003,'a',35,true)
]
斷言,強制指定類型
//斷言類型 適用於有些類型無法確定的情況
//子類也屬於父類類型,因為子類的原型存在父類
import Parent from './a'
import Child from './b'
var arr1:Array<Parent>=[
new Parent(),
new Child()
]
for(let i = 0; i < arr1.length; i ++){
if(arr1[i].constructor === Child){
//斷言,Array裝載Parent類型,而Parent沒有run方法,但是Child有
//斷言強制認為此元素是Child類型
(arr1[i] as Child).run();
}
}