TypeScript(ts)學(xué)習(xí)筆記(二):基礎(chǔ)類型

布爾類型

我們用 boolean 來表示布爾類型 (開頭是小寫的)

const flag: boolean = false;

數(shù)字類型

let binaryLiteral: number = 0f0f0f; // 二進制
let octalLiteral: number = 0o744; // 八進制
let decLiteral: number = 111; // 十進制
let hexLiteral: number = 0xf00d; // 十六進制

字符串類型

const name: string = "hello world";

數(shù)組類型

有兩種方式可以定義數(shù)組。 第一種血久,可以在元素類型后面接上 []沧侥,表示由此類型元素組成的一個數(shù)組:

const arr: number[] = [1, 2, 3]

第二種方式是使用數(shù)組泛型,Array<元素類型>

const arr: Array<string> = ['4','5','6']

元組(Tuple)

元組類型與數(shù)組類型非常相似,元組表示一個已知元素數(shù)量和類型的數(shù)組龄恋,各元素的類型可以不同:

let x: [string, number] = ['1', 2]; // OK
x = [10, 'hello']; // Error
x[2] = 3; // Error
x.push(3); // OK
console.log(x[3]); // Error

枚舉(enum)

枚舉類型是對JavaScript標(biāo)準(zhǔn)數(shù)據(jù)類型的一個補充。 像其它語言一樣凶伙,使用枚舉類型可以為一組數(shù)值賦予友好的名字郭毕。

數(shù)字枚舉

enum Color { Red, White, Blue }
let c: Color = Color.White
console.log(c); // 1

默認是數(shù)字類型,并且從0開始累加函荣,修改其中某個值显押,后面會根據(jù)前一個值進行累加:

enum Color { Red = 1, White, Blue }
let c: Color = Color.White
console.log(c); // 2
enum Color { Red, White=2, Blue = 1, Green }
console.log(Color); // 0 2 1 2

字符串枚舉

枚舉的值為字符串類型

enum Direction {
    North = "North",
    South = "South",
    East = "East",
    West = 'North',
}
console.log(Direction['Down']); // South
console.log(Direction.Left); // North

異構(gòu)枚舉

枚舉的值是數(shù)字和字符串的混合

enum Person {
  age = 20,
  name = "zhangsan"
}

反向映射

enum Person {
  age = 20,
  name = "zhangsan"
}
console.log(Person.age); // 20
console.log(Person[20]); // 'age'
console.log(Person['zhangsan']); // Error (數(shù)字類型才有反向映射)

為什么數(shù)字枚舉具有反向映射的特性,我們看一下編譯之后的JavaScript就知道了

var Person;
(function (Person) {
    Person[Person["age"] = 20] = "age";
    Person["name"] = "zhangsan";
})(Person || (Person = {}));

常量枚舉

const enum enum1 {
    a = "A",
    b = "B"
}
console.log(enum1['a']); // A
console.log(enum1['b']); // B

編譯之后的JavaScript

console.log("A" /* 'a' */);
console.log("B" /* 'b' */);

Any類型

any類型是TypeScript針對編程時類型不明確的變量使用的一種數(shù)據(jù)類型:

let notSure: any = 4;
notSure = "hello world";
notSure = false; 

包含不同類型數(shù)據(jù)的數(shù)組:

let list: any[] = [1, true, "free"];
list[1] = 100;

Void

它表示沒有任何類型傻挂。 當(dāng)一個函數(shù)沒有返回值時乘碑,通常它的返回值類型是 void

function say(): void{
  console.log( "hello world!" )
}

只有undefinednull可以賦給void

Undefined 和 Null

undefinednull兩者各自有自己的類型分別叫做undefinednull, 和void相似金拒,它們的本身的類型用處不是很大:

let u: undefined = undefined;
let v: void = void;

我們在正式項目最好啟用 --strictNullChecks 蝉仇,即 undefinednull只能賦值給 any void 和它們自己。

Never

never 代表永遠不存在的值殖蚕,是其它任何類型的子類型轿衔。這意味著聲明為never 類型的變量只能被 never類型所賦值,在函數(shù)中它通常表現(xiàn)為拋出異衬酪撸或無法執(zhí)行到終止點(例如無限循環(huán)):

function loop(): never {
    while (true) {}
}
function error(message: string): never {
    throw new Error(message);
}

Object

object表示非原始類型害驹,也就是除了numberstring蛤育,boolean宛官,symbolnullundefined之外的類型瓦糕。

let obj: object|null;
obj = enum2; // 枚舉 ok
obj = 2; // Error
obj = "haha"; // Error
obj = null; 
obj = {name:"zhangsan"}

Unknow

unknownTypeScript 3.0 引入的新類型底洗,是any 類型對應(yīng)的安全類型。
any類型一樣咕娄,它可以是任何類型:

let value: any; 
value = 1;  // OK
value = "2"; // OK
value = [1, 2, 3]; // OK
value = null; // OK
let value: unknow; 
value = 1; // OK
value = "2"; // OK
value = [1, 2, 3]; // OK
value = null; // OK

但是當(dāng) unknown 類型被確定是某個類型之前,它不能被進行任何操作:

let value: any; 
value(); // OK
value[0]; // OK
value.name; // OK
new value(); // OK
let value: unknow; 
value(); // Error
value[0]; // Error
value.name; // Error
new value(); // Error

any由于過于靈活的設(shè)定亥揖,導(dǎo)致它與 JavaScript沒有太多區(qū)別,很容易產(chǎn)生一些低級錯誤圣勒,所以在很多場景下我們可以選擇unknown 來代替any费变。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市圣贸,隨后出現(xiàn)的幾起案子挚歧,更是在濱河造成了極大的恐慌,老刑警劉巖吁峻,帶你破解...
    沈念sama閱讀 221,273評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件滑负,死亡現(xiàn)場離奇詭異在张,居然都是意外死亡,警方通過查閱死者的電腦和手機矮慕,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,349評論 3 398
  • 文/潘曉璐 我一進店門帮匾,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人凡傅,你說我怎么就攤上這事辟狈。” “怎么了夏跷?”我有些...
    開封第一講書人閱讀 167,709評論 0 360
  • 文/不壞的土叔 我叫張陵哼转,是天一觀的道長。 經(jīng)常有香客問我槽华,道長壹蔓,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,520評論 1 296
  • 正文 為了忘掉前任猫态,我火速辦了婚禮佣蓉,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘亲雪。我一直安慰自己勇凭,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 68,515評論 6 397
  • 文/花漫 我一把揭開白布义辕。 她就那樣靜靜地躺著虾标,像睡著了一般。 火紅的嫁衣襯著肌膚如雪灌砖。 梳的紋絲不亂的頭發(fā)上璧函,一...
    開封第一講書人閱讀 52,158評論 1 308
  • 那天,我揣著相機與錄音基显,去河邊找鬼蘸吓。 笑死,一個胖子當(dāng)著我的面吹牛撩幽,可吹牛的內(nèi)容都是我干的库继。 我是一名探鬼主播,決...
    沈念sama閱讀 40,755評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼摸航,長吁一口氣:“原來是場噩夢啊……” “哼制跟!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起酱虎,我...
    開封第一講書人閱讀 39,660評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎擂涛,沒想到半個月后读串,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體聊记,經(jīng)...
    沈念sama閱讀 46,203評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,287評論 3 340
  • 正文 我和宋清朗相戀三年恢暖,在試婚紗的時候發(fā)現(xiàn)自己被綠了排监。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,427評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡杰捂,死狀恐怖舆床,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情嫁佳,我是刑警寧澤挨队,帶...
    沈念sama閱讀 36,122評論 5 349
  • 正文 年R本政府宣布,位于F島的核電站蒿往,受9級特大地震影響盛垦,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜瓤漏,卻給世界環(huán)境...
    茶點故事閱讀 41,801評論 3 333
  • 文/蒙蒙 一腾夯、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧蔬充,春花似錦蝶俱、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,272評論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至趾浅,卻和暖如春愕提,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背皿哨。 一陣腳步聲響...
    開封第一講書人閱讀 33,393評論 1 272
  • 我被黑心中介騙來泰國打工浅侨, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人证膨。 一個月前我還...
    沈念sama閱讀 48,808評論 3 376
  • 正文 我出身青樓如输,卻偏偏與公主長得像,于是被迫代替她去往敵國和親央勒。 傳聞我的和親對象是個殘疾皇子不见,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,440評論 2 359