TypeScript – 基礎(chǔ)類型
1 .'boolean' -- 布爾類型,可以賦值true/false 和Boolean()對(duì)象
2. 'number' -- 數(shù)字類型,可以賦值'2/8/10/16進(jìn)制','整數(shù)類型',
'小數(shù)類型','NaN','Infinity(表示無(wú)窮大)'
3. 'string' -- 字符串類型
4. '數(shù)組類型' -- '類型[]' /' Array<類型>'
5. '元組類型' -- '[類型]'
6. 'enum' -- 枚舉
7. 'any' -- 任意類型
8. 'void' -- 空置,定義方法時(shí)候沒(méi)有返回值使用
9.'null/undefined' -- 'Null 和 Undefined'
10. 'never' -- 不存在類型一般用于錯(cuò)誤處理函數(shù).例如'拋出異常'/'死循環(huán)'
11. 'object' -- 對(duì)象
12. '類型斷言' -- 手動(dòng)指定一個(gè)值的類型。
let 和 const
兩者區(qū)別'const' 必須定義就賦值,但'let' 定義時(shí)候可以不賦值,但使用時(shí)候
必須賦值
- 錯(cuò)誤示范
// const
const name1 : string // ts會(huì)校驗(yàn) 定義時(shí)必須要賦值
// let
let name2 : string // 這一步是正確的可以定義不賦值
console.log(name2) // 錯(cuò)誤的 使用時(shí)候必須要賦值
- 正確寫法
// const
const name1 : string = 'Tom'
console.log(name1) // 打印結(jié)果 Tom
// let
let name2 : string // 當(dāng)然也可以寫成 let name2:string = 'Anne'
name1 ='Anne'
console.log(name2) // 打印結(jié)果是Anne
基本類型寫法
布爾類型 – boolean
1.只能賦值true 或者 false和Boolean()對(duì)象
- 賦值為true 和 false
let bool:boolean = true // 只能賦值true 或者 false 和Boolean()對(duì)象
bool = false // 重新賦值
console.log(bool) // 打印結(jié)果false
- 賦值為Boolean()對(duì)象
let bool: boolean = Boolean(1)
console.log(bool) // true
數(shù)字類型 – number
1.ts 和 js 一樣,TypeScript里的所有數(shù)字都是浮點(diǎn)數(shù)。不像java中有整數(shù)類
型、雙精度類型等等,因?yàn)?span id="n5n3t3z" class="token string">'ts' 的 數(shù)字表現(xiàn)形式是'number'
2.定義成number 只能賦值有:
'二進(jìn)制'、'八進(jìn)制'、'十進(jìn)制'、'十六進(jìn)制'、
'整數(shù)類型和小數(shù)類型(整數(shù)類型可以算進(jìn)十進(jìn)制)'、'NaN(非數(shù)字類型)'、
'Infinity(表示無(wú)窮大)'
使用 number 定義數(shù)值類型
let decLiteral: number = 6;
let hexLiteral: number = 0xf00d;
// ES6 中的二進(jìn)制表示法
let binaryLiteral: number = 0b1010;
// ES6 中的八進(jìn)制表示法
let octalLiteral: number = 0o744;
let notANumber: number = NaN;
let infinityNumber: number = Infinity;
編譯結(jié)果
var decLiteral = 6;
var hexLiteral = 0xf00d;
// ES6 中的二進(jìn)制表示法
var binaryLiteral = 10;
// ES6 中的八進(jìn)制表示法
var octalLiteral = 484;
var notANumber = NaN;
var infinityNumber = Infinity;
字符串類型 – string
let str: string = 'abc'
str = `字符串: ${ str }` // 字符串也支持es6的`` 拼接寫法
console.log( str )
數(shù)組類型
數(shù)組類型是用來(lái)限制數(shù)組內(nèi)部元素的類型,有兩種寫法
1.'「類型 + 方括號(hào)」表示法'
2.'數(shù)組泛型'
- 「類型 + 方括號(hào)」
// 第一種寫法
let arr: number[]
arr = [1,2,3,4]
- 泛型
// 第二種寫法泛型
let arr: Array<number>
arr = [1,2,3,4]
- 聯(lián)合類型
let arr: (string|number)[] // 既可以是數(shù)字也可以是字符串類型
arr = [1,'abc']
// 聯(lián)合類型泛型的形式
let arr: Array<string|number>
arr = [1,'abc']
元組類型
數(shù)組合并了相同類型的對(duì)象,而元組(Tuple)合并了不同類型的對(duì)象。
1.元組類型:固定長(zhǎng)度固定類型
2.順序必須一一對(duì)應(yīng)
3.是可以'push' 往里面添加元素,但只能添加定義好的聯(lián)合類型
let tom: [string, number, boolean]
tom = ['abc', 1, true]
枚舉類型 – enum
枚舉(Enum)類型用于取值被限定在一定范圍內(nèi)的場(chǎng)景,比如一周只能有七天,顏色限定為紅綠藍(lán)等。
- 枚舉定義
// 簡(jiǎn)單例子
enum Days {Sun, Mon, Tue, Wed, Thu, Fri, Sat}; // 枚舉成員默認(rèn)會(huì)被賦值為從 0 開始遞增的數(shù)字
// 也可以手動(dòng)賦值
enum Days {Sun = 7, Mon = 1, Tue, Wed, Thu, Fri, Sat};
console.log(Days["Sun"] === 7); // true
console.log(Days["Tue"] === 2); // true
console.log(Days["Sat"] === 6); // true
- 枚舉項(xiàng)有兩種類型:常數(shù)項(xiàng)(constant member)和計(jì)算所得項(xiàng)(computed member)。
// 上面的例子是常數(shù)項(xiàng),下面是一個(gè)典型的計(jì)算所得項(xiàng)的例子
enum Color {Red, Green, Blue = "blue".length} // "blue".length 就是一個(gè)計(jì)算所得項(xiàng)
打印出來(lái)是這個(gè)結(jié)構(gòu)
注意:緊接在計(jì)算所得項(xiàng)后面的必須手動(dòng)賦值的項(xiàng),否則它就會(huì)因?yàn)闊o(wú)法獲得初始值而報(bào)錯(cuò)
任意類型 – any
1.有些值可能來(lái)自于動(dòng)態(tài)的內(nèi)容,比如來(lái)自用戶輸入或第三方代碼庫(kù)。 這種情況下,我們不希望類
型檢查器對(duì)這些值進(jìn)行檢查而是直接讓它們通過(guò)編譯階段的檢查。 那么我們可以使用any類型來(lái)標(biāo)
記這些變量
2.如果變量在聲明的時(shí)候,未指定其類型,那么它會(huì)被識(shí)別為任意值類型
如果是一個(gè)普通類型,在賦值過(guò)程中改變類型是不被允許的
// 錯(cuò)誤寫法
let name: string = 'Tom'
str= 7
// index.ts(2,1): error TS2322: Type 'number' is not assignable to type 'string'.
但如果是 any 類型,則允許被賦值為任意類型。
let name: any= 'Tom'
name = 7
name = true
聲明一個(gè)變量為任意值之后,對(duì)它的任何操作,返回的內(nèi)容的類型都可以是任意值。這就違背了
我們用ts嚴(yán)格規(guī)范類型的意義,所以在項(xiàng)目中盡可能少用any定義類型
空值 – void
// 'void'表示沒(méi)有任何返回值的函數(shù)
function getName(): void {
alert('My name is Tom');
}
Null 和 Undefined
與 void 的區(qū)別是,undefined 和 null 是所有類型的子類型。也就是說(shuō) undefined 類型
的變量,可以賦值給 number 類型的變量
let u: undefined = undefined;
let n: null = null;
let u: undefined
let num: number = u; // 這樣不會(huì)報(bào)錯(cuò)
不存在的類型 – never
1.never類型表示的是那些永不存在的值的類型。 例如, never類型是那些總是會(huì)拋出異?;?根本就不會(huì)有返回值的函數(shù)表達(dá)式或箭頭函數(shù)表達(dá)式的返回值類型; 變量也可能是 never
類型,當(dāng)它們被永不為真的類型保護(hù)所約束時(shí)。
2.never類型是任何類型的子類型,也可以賦值給任何類型;然而,沒(méi)有類型是never的子類型
或可以賦值給never類型(除了never本身之外)。 即使 any也不可以賦值給never。
let x: never;
let y: number;
// 運(yùn)行錯(cuò)誤,數(shù)字類型不能轉(zhuǎn)為 never 類型
x = 123;
// 運(yùn)行正確,never 類型可以賦值給 never類型
x = (()=>{ throw new Error('exception')})();
// 運(yùn)行正確,never 類型可以賦值給 數(shù)字類型
y = (()=>{ throw new Error('exception')})();
// 返回值為 never 的函數(shù)可以是拋出異常的情況
function error(message: string): never {
throw new Error(message);
}
// 返回值為 never 的函數(shù)可以是無(wú)限循環(huán)這種無(wú)法被執(zhí)行到的終止點(diǎn)的情況
function loop(): never {
while (true) {}
}
對(duì)象 – object
let obj:object = {
name:"tom"
}
function objFun(obj:object): void{
console.log(obj)
}
objFun(obj)
類型斷言
1.當(dāng) ts 不確定一個(gè)聯(lián)合類型的變量到底是哪個(gè)類型的時(shí)候,我們只能訪問(wèn)此聯(lián)合類型的所有類型
里共有的屬性或方法
2.兩種寫法:'<類型>值' 或者 '值 as 類型'
- 兩種寫法
// 尖括號(hào)寫法:<類型>值
let str: any = "this is a string";
let strLength: number = (<string>str).length;
// as 的寫法: 值 as 類型
let str: any = "this is a string";
let strLength: number = (str as string).length;
- 函數(shù)中的應(yīng)用
function getLength(something: string | number): number {
if ((<string>something).length) {
return (<string>something).length;
} else {
return something.toString().length;
}
}
注意:類型斷言不是類型轉(zhuǎn)換,斷言成一個(gè)聯(lián)合類型中不存在的類型是不允許的文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-613231.html
function toBoolean(something: string | number): boolean {
return <boolean>something;
}
// index.ts(2,10): error TS2352: Type 'string | number' cannot be converted to type 'boolean'.
// Type 'number' is not comparable to type 'boolean'.
文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-613231.html
到了這里,關(guān)于TypeScript -- 基礎(chǔ)類型的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!