TypeScript 中的基本数据类型

本节我们学习 TypeScript 语言中的数据类型,有:数字类型、字符串类型、布尔值、数组、元组等等。TypeScript 支持与 JavaScript 几乎相同的数据类型,此外还提供了实用的枚举类型方便我们使用。

数字类型

JavaScript 中一样,TypeScript 中的所有数字都是浮点数。这些浮点数的类型为 number 类型。number 类型除了支持十进制和十六进制字面量,还支持 ECMAScript 2015 中引入的二进制和八进制字面量。

示例:

声明数字类型的变量,可以是二进制、十进制、十六进制、八进制表示形式:

let n1: number = 8;          // 十进制
let n2: number = 0xf00d;     // 十六进制
let n3: number = 101010;     // 二进制
let n4: number = 0o633;      // 八进制
console.log(n1, n2, n3, n4);

编译成 JavaScript 代码:

var n1 = 8;      // 十进制
var n2 = 0xf00d; // 十六进制
var n3 = 101010; // 二进制
var n4 = 411;    // 八进制
console.log(n1, n2, n3, n4);

// 8 61453 101010 411

什么是十进制、二进制、八进制、十六进制:

  • 十进制:十进制数就是用 012 ....9,这十个数来表示的数。
  • 二进制:二进制数据是用 01 两个数码来表示的数。它的基数为 2,进位规则是“逢二进一”,借位规则是“借一当二”。
  • 八进制:八进制是一种以 8 为基数的计数法,采用 01234567 八个数字,逢八进 1
  • 十六进制:十六进制是计算机中数据的一种表示方法。同我们日常中的十进制表示法不一样。一般用数字 09 和字母 AF(或 a~f)表示,这些数字和字母任意组合用来表示 0~15 之间的某个字。其中 A~F 表示 10~15,这些称作十六进制数。

布尔类型

布尔类型 boolean 表示逻辑值,只有 truefalse 这两个值。

示例:

例如声明两个布尔类型的变量,并输出:

const b1: boolean = true;
const b2: boolean = false;

console.log(b1, b2);

将上述代码编译成 JavaScript 代码:

var b1 = true;
var b2 = false;
console.log(b1, b2);

输出:

true false

字符串类型

字符串类型 string 用于表示文本数据类型,与 JavaScript 中一样,可以使用单引号 ' 或双引号 " 来表示字符串。

示例:

声明一个字符串类型的变量:

let str: string = "侠课岛";
console.log(str);

输出:

侠课岛

数组类型

数组类型有两种表示方法,第一种在元素类型后接上中括号 [],表示此类型元素组成的一个数组。

示例:

例如声明一个由数字类型组成的数组 num,和一个由字符串类型组成的数组 character

// 在元素类型后面加上[],定义数字类型数组
let num: number[] = [1, 2, 3];
console.log(num);

// 定义字符串类型数组
let character: string[] = ['a', 'b', 'c'];
console.log(character);

第二种方式是使用数组泛型,格式为 Array<元素类型>

示例:

例如声明一个数字类型的数组:

// 使用数组泛型
let arr: Array<number> = [1, 2, 3];
console.log(arr2);

将上面的代码都编译成 JavaScript 代码:

// 使用数组泛型
var arr = [1, 2, 3];
console.log(arr2);

输出:

[ 1, 2, 3 ]

元组类型

元组表示已知元素数量和类型的数组,元组中的元素可以由是不同类型,但是要注意,所定义类型的个数和顺序必须与元素值一一对应,少一个都不行。

示例:

声明一个元组,元组中的第一个元素为字符串类型,第二个元素为数字类型:

// 类型和值必须一一对应
let tuple: [string, number] = ['小飞侠', 18];    

console.log(tuple);
console.log(tuple[0]);   

编译成 JavaScript 代码:

// 类型和值必须一一对应
var tuple = ['小飞侠', 18]; 
console.log(tuple);
console.log(tuple[0]); 

输出:

[ '小飞侠', 18 ]
小飞侠

枚举类型

枚举类型 enum 用于定义数值集合。

示例:

声明一个枚举类型的变量 Fruits,这个变量中有三个不同的值:

enum Fruits {watermelon, Apple, Litchi};
console.log(Fruits);

将代码编译成 JavaScript 代码:

var Fruits;
(function (Fruits) {
    Fruits[Fruits["watermelon"] = 0] = "watermelon";
    Fruits[Fruits["Apple"] = 1] = "Apple";
    Fruits[Fruits["Litchi"] = 2] = "Litchi";
})(Fruits || (Fruits = {}));
;
console.log(Fruits);

执行代码后输出结果为:

{
  '0': 'watermelon',
  '1': 'Apple',
  '2': 'Litchi',
  watermelon: 0,
  Apple: 1,
  Litchi: 2
}

any 任意类型

任意值是 TypeScript 针对编程时类型不明确的变量使用的一种数据类型,声明为 any 的变量可以赋予任意类型的值。

示例:

例如声明一个 any 类型的变量 unknown

let unknown: any;
unknown = 7;         // 数字类型
console.log(unknown);

unknown = 'xkd';     // 字符串类型
console.log(unknown);

unknown = false;     // 布尔类型
console.log(unknown);

将上述代码编译成 JavaScript 代码:

var unknown;
unknown = 7; // 数字类型
console.log(unknown);
unknown = 'xkd'; // 字符串类型
console.log(unknown);
unknown = false; // 布尔类型
console.log(unknown);

输出:

7
xkd
false

void 类型

Java 等语言中,如果一个方法没有返回值,则默认该方法返回值类型为 void 类型。

JavaScript 中并没有此类型,这个 TypeScript 新增的类型。

void 可用于标识方法返回值的类型,表示该方法没有返回值。

示例:

如果定义函数时,没有返回值,建议在函数名后面接一个 void。例如下面这个函数 show() ,我们没有给它指定返回值,所以指定这个函数的返回值为 void 类型:

function show(): void {
    console.log("你好,侠课岛!");
}

// 调用函数
show();  

编译成 JavaScript 代码:

function show() {
    console.log("你好,侠课岛!");
}
// 调用函数
show();

输出:

你好,侠课岛!

Null类型和Undefined 类型

null 类型和 undefined 类型与 JavaScript 中的对应类型非常类似,这两个类型分别是 Null 类型和 Undefined 的直接量,也是唯一的值。

示例:
var n = null;
var u = undefined;
console.log(n, u);   // null undefined

Never类型

Never 类型表示的是那些永不存在的值的类型。

示例:

在声明变量时,我们可以将变量声明为 never 类型:

let a: never;

never 类型是任何类型的子类型,也可以赋值给任何类型。

示例:
let a: never;
let b: number;
let c: string;
// never类型可以赋值给never类型
a = (()=>{ 
    throw new Error('xkd');
})();

// never类型可以赋值给number类型
b = (()=>{
    throw new Error('xkd');
})();

// never类型可以赋值给string类型
c = (()=>{ 
    throw new Error('xkd');
})();

但是没有类型是 never 的子类型或可以赋值给 never 类型,即使 any 也不可以赋值给 never

示例:

例如将数字类型的值赋值给 never 类型:

let a: never;
a = 100;    

// 输出: Type '100' is not assignable to type 'never'

链接:https://www.9xkd.com/

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,362评论 5 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,330评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,247评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,560评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,580评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,569评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,929评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,587评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,840评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,596评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,678评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,366评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,945评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,929评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,165评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,271评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,403评论 2 342

推荐阅读更多精彩内容