原始數(shù)據(jù)類型
JavaScript 的類型分為兩種:原始數(shù)據(jù)類型(Primitive data types)和對(duì)象類型(Object types)。
原始數(shù)據(jù)類型包括:布爾值淘正、數(shù)值摆马、字符串、
null
鸿吆、undefined
以及 ES6 中的新類型Symbol
囤采。
布爾值
在TypeScript中,使用boolean
定義布爾值類型:
let isDone: boolean = false;
需要注意的是惩淳,使用構(gòu)造函數(shù) Boolean 創(chuàng)造的對(duì)象不是布爾值蕉毯,而是一個(gè) Boolean 對(duì)象:
let createdByNewBoolean: Boolean = new Boolean(1);
直接調(diào)用 Boolean 也可以返回一個(gè) boolean 類型:
let createdByBoolean: boolean = Boolean(1);
在 TypeScript 中,boolean 是 JavaScript 中的基本類型黎泣,而 Boolean 是 JavaScript 中的構(gòu)造函數(shù)恕刘。其他基本類型(除了 null 和 undefined)一樣
數(shù)值
使用 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;
其中 0b1010
和 0o744
是 ES6 中的二進(jìn)制和八進(jìn)制表示法,它們會(huì)被編譯為十進(jìn)制數(shù)字抒倚。
空值
JavaScript沒有空值(Void)的概念褐着,在TypeScript中,可以用void
表示沒有任何返回值的函數(shù):
function alertName(): void {
alert('My name is Tom');
}
聲明一個(gè) void 類型的變量沒有什么用托呕,因?yàn)槟阒荒軐⑺x值為 undefined 和 null:
let unusable: void = undefined;
Null 和 Undefined
在TypeScript中含蓉,可以使用 null 和 undefined 來定義這兩個(gè)原始數(shù)據(jù)類型:
let u: undefined = undefined;
let n: null = null;
undefined 類型的變量只能被賦值為 undefined频敛,null 類型的變量只能被賦值為 null。
與 void 的區(qū)別是馅扣,undefined 和 null 是所有類型的子類型斟赚。也就是說 undefined 類型的變量,可以賦值給 number 類型的變量:
// 這樣不會(huì)報(bào)錯(cuò)
let num: number = undefined;
// 這樣也不會(huì)報(bào)錯(cuò)
let u: undefined;
let num: number = u;
而 void 類型的變量不能賦值給 number 類型的變量:
let u: void;
let num: number = u;
// index.ts(2,5): error TS2322: Type 'void' is not assignable to type 'number'.
任意值
任意值(Any)用來表示允許賦值為任意類型差油。
如果是一個(gè)普通類型拗军,在賦值過程中改變類型是不被允許的,但如果是 any 類型蓄喇,則允許被賦值為任意類型
let myFavoriteNumber: string = 'seven';
myFavoriteNumber = 7;
// index.ts(2,1): error TS2322: Type 'number' is not assignable to type 'string'.
let myFavoriteNumber: any = 'seven';
myFavoriteNumber = 7;
在任意值上允許訪問任何屬性发侵,也允許調(diào)用任何方法:
let anyThing: any = 'hello';
console.log(anyThing.myName);
console.log(anyThing.myName.firstName);
anyThing.setName('Jerry');
anyThing.setName('Jerry').sayHello();
anyThing.myName.setFirstName('Cat');
可以認(rèn)為,聲明一個(gè)變量為任意值之后妆偏,對(duì)它的任何操作刃鳄,返回的內(nèi)容的類型都是任意值。
未聲明類型的變量
變量如果在聲明的時(shí)候钱骂,未指定其類型叔锐,那么它會(huì)被識(shí)別為任意值類型:
let something;
something = 'seven';
something = 7;
something.setName('Tom');
等價(jià)于
let something: any;
something = 'seven';
something = 7;
something.setName('Tom');