typeScript 基礎型別 (三)

史洲宇發表於2024-11-21

typeScript 的基礎型別包含 Boolean、Number、String、nullundefined 以及 ES6 的 Symbol 和 ES10 的 BigInt

下面介紹每種型別的使用和規則

一、字串型別介紹

// 普通的字串宣告方式
let str:string = 'momo~ssds'
// 也可以使用模版字串

let str1:string = `模版字串${str}`

console.log('str1 :>> ', str1);

二、數字型別

// 支援十六進位制、十進位制、八進位制和二進位制;

let num1: number = NaN; //Nan
let num2: number = 454555; //普通數字
let num3: number = Infinity; //無窮大
let num4: number = 456 //十進位制
let num5: number = 0xf00d; //十六進位制
let num6: number = 0b1010; //二進位制
let num7: number = 0o744; //八進位制s

三、布林型別

// 布林型別
// 注意,使用建構函式 Boolean 創造的物件不是布林值:

// let createdBoolean: boolean = new Boolean(1)
//這樣會報錯 應為事實上 new Boolean() 返回的是一個 Boolean 物件 
 
// 事實上 new Boolean() 返回的是一個 Boolean 物件 需要改成

let createdBoolean: Boolean = new Boolean(1)
let booleand: boolean = true //可以直接使用布林值

這裡需要注意這個

4.空值型別

js 中沒有空值(Void)的概念,在 TypeScript 中,可以用 void 表示沒有任何返回值的函式

function voidFn(): void { // 這裡的void 就表示此函式的返回值為空值
    console.log('test void')
}

當一個函式無需返回值的時候我們就可以給這個函式定義成空值返回

另外 void也可以定義undefined 和 null型別

let u: void = undefined
let n: void = null;

但是當我們給void 定義成null的時候,報錯了,這個是因為ts的嚴格模式下是不允許給void 設定成null的,要放開這個限制,可以修改tsconfig.json 檔案把嚴格模式去掉

我們把這一行去掉後,發現就不報錯了

5.Null和undefined型別

// null 和underfined 也是基礎型別 我們是可以這麼寫的
let u: undefined = undefined; //定義undefined
let n: null = null; //定義null

void 和 undefined 和 null 最大的區別

void 的區別是,undefinednull 是所有型別的子型別。也就是說 undefined 型別的變數,可以賦值給 string 型別的變數:

比如我們這麼寫會報錯的

//下面這麼寫就可以
let test: null = null
let num2: string = "1"
 
num2 = test
 
//或者這樣的
let test: undefined = undefined
let num2: string = "1"
 
num2 = test

6、Any 型別 和 unknown 頂級型別

any型別就是無法確定是哪種型別的時候就可以使用,其實變相告訴ts不要去檢查這個變數的型別

let anys: any = 123
anys = '123'
anys = true
anys = {a:1}
// 那麼當我們沒有宣告一個變數的型別的時候預設就是any型別 這麼寫是可以的 但是不推薦
let any1
any1 = 1
any1 = '1223'

TypeScript 3.0中引入的 unknown 型別也被認為是 top type ,但它更安全。與 any 一樣,所有型別都可以分配給unknown

unknow unknow型別比any更加嚴格當你要使用any 的時候可以嘗試使用unknow

//unknown 可以定義任何型別的值
let value: unknown;
 
value = true;             // OK
value = 42;               // OK
value = "Hello World";    // OK
value = [];               // OK
value = {};               // OK
value = null;             // OK
value = undefined;        // OK
value = Symbol("type");   // OK
 
//這樣寫會報錯unknow型別不能作為子型別只能作為父型別 any可以作為父型別和子型別
//unknown型別不能賦值給其他型別
let names:unknown = '123'
let names2:string = names
 
//這樣就沒問題 any型別是可以的
let names:any = '123'
let names2:string = names   
 
//unknown可賦值物件只有unknown 和 any
let bbb:unknown = '123'
let aaa:any= '456'
 
aaa = bbb

還有一個需要注意的是,如果物件被定義成any和unknow 表現是不一樣的,定義成unknow 型別的物件是無法直接使用物件中的屬性和方法的

// 如果是any型別在物件沒有這個屬性的時候還在獲取是不會報錯的
let obj: any = { b: 1 }
obj.a
 
 
// 如果是unknow 是不能呼叫屬性和方法 下面的這個寫法是會報錯的
let obj1: unknown = { b: 1, ccc: (): number => 213 }
obj1.b
obj1.ccc()

下一節介紹介面和物件型別

相關文章