Typescript 類型限定


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();
    }

}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM