2018年9月11日(週二)

TS

數據類型

string

number

boolean

string

數組

number[] :是同類型的集合

元組

[number,string] 不同類型的集合

與數組的不同:
聲明:

let a: number[] = [1, 2, 3, 4];
let t: [number, number, string] = [1, 2, 'string'];//聲明時必須對應
**元組聲明可以不賦值,但是賦值的時候,必須全部賦值完畢,否則會報錯**

修改值:
元組修改的值的時候,只能添加或修改對應的類型
數組也只能添加對應的類型

枚舉

enum 聲明
enum a {'hello', 'word'};
a[0] === 'hello';
a['helllo'] = 0;
// 這裏原生js存儲的是
var a;
(function (a) {
    a[a["hello"] = 0] = "hello";
    a[a["word"] = 1] = "word";
})(a || (a = {}));

注意點
聲明的時候,可以手動給值賦下標,例如:

enum a {'hello' = 5, 'word' = 2, 'a', 'b'}; // 下標重複
enum a {'hello' = 5, 'word' = 2, 'a'='hello'}; //手動賦值字符串

下標可以不爲數字,可以爲字符串等
如果下標爲數字時,後一個數據是按照前一個數據下標 +1 來標記的,但是可能會導致下標重複(如上所示)會導致錯誤
如果用字符串來聲明,會導致後續的所有的數據全部是0,例如

enum a {'hello' = 5, 'word' = 'hello', 'a', 'b'};、
var a;
(function (a) {
    a[a["hello"] = 5] = "hello";
    a["word"] = "hello";
    a[a["a"] = void 0] = "a";// 這裏下標0
    a[a["b"] = void 0] = "b";// 這裏下標0
})(a || (a = {}));

any 指任意類型

void 沒有返回值

null 和 undefind

null 和 undefind是其他類型的子集,聲明後可以轉成任何其他類型
const d: string = null;

never 用不存在的類型

特點:
never類型是那些總是會拋出異常或根本就不會有返回值的函數表達式或箭頭函數表達式的返回值類型; 變量也可能是 never類型,當它們被永不爲真的類型保護所約束時。
never類型是任何類型的子類型,也可以賦值給任何類型;然而,沒有類型是never的子類型或可以賦值給never類型(除了never本身之外)。 即使 any也不可以賦值給never

和void異同:
never可以是變量類型,但是void一般爲無返回值
當never和void同時爲函數返回值類型,never爲Error返回值或永遠不會有返回值;而void爲無返回值,即無return字段

function demo(): void {

}

function demo(): never {
   throw Error();
}

function demo(): never {
    while (true) {

    }
}

類型斷言

< Type > 和 as類型斷言

let demo: any = 'hello';
<string>demo;
demo as string;

類型斷言不是類型轉換,斷言成一個聯合類型中不存在的類型是不允許的

function demo(x: string | number): string {
return x as string;
return x as boolean // 類型斷言不是轉換 就會報錯
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章