【TS】基础数据类型

微信订阅号:Rabbit_svip



在了解TypeScript(简称TS)基础数据类型之前,先聊聊类型的“强弱动静”之分。

TS是JS的超集,JS是一门动态弱类型语言。与之对应的自然有静态类型语言强类型语言

在学习一门语言之前是值得花时间去区分类型之间的区别,而这也是程序员之间鄙视链出现的原因之一。


强类型语言

在强类型语言中,当一个对象从调用函数传递到被调用函数时,其类型必须与被调用函数中声明的类型兼容。
-- Liskov, Zilles 1974

上面的观点是由 Liskov 和 Zilles 这两位美国计算机科学家提出的。但很遗憾的是,关于强类型语言的定义到现在为止还存在争议。

虽然说关于强类型语言的定义还存在争议。

但主流观点还是:不允许改变变量的数据l类型,除非进行强制类型转换。

在美国加州大学的讲义中,对强类型语言的定义是:不允许程序在发生错误后继续执行。

这么一来,C和C++就变成弱类型语言,因为它们没有对数组越界进行检查,由此可能会导致程序的崩溃。



弱类型语言

变量可以被赋予不同的数据类型。



静态类型语言

编译阶段确定所有变量的类型。

静态类型语言对类型极度严格,所以代码可读性好,能自文档化,编译时就能立即发现错误并提示,所以运行的时候性能比较好。



动态类型语言

执行阶段确定所有变量的类型。

动态类型语言对类型要求极度宽松,从而也会出现代码可读性较差,也有可能出现一些隐藏的Bug,程序上线后一段时间才能发现,而且还可能难以找出Bug。因为是在执行阶段才确定变量类型,所以性能会差一些。

在JS中,数据类型是存在隐式转换的。以下面的简单代码为例

var a = 1;
console.log(a == true); // true

从上面的代码可以看出,变量a 是数值型,在JS中,非0的数值都可以等于 true(boolean),由此看出,JS 并不属于主流观点中认为的强类型语言。

通过function传值、es6提供的class等方法,也能看出JS是动态类型语言。这里就不举代码例子了。

也正因为JS是动态弱类型语言,所以也经常处在鄙视链最底层(虽然企业对懂JS的程序员需求量非常大)。

由于使用JS的开发者数量也挺庞大的,所以也出现了很多动态语言的支持者。


比如说:

  1. “性能在不断改善,所以语言的灵活性应该更重要”。对于这点V8引擎就做了很好的支持。
  2. “单元测试可以帮我们发现程序的隐藏Bug”。Jest就是前端同学该上的一门测试课。
  3. 文档可以通过工具生成。


在当今多元时代,偏见和歧视其实是需要付出一定代价的。所以不管JS是因为历史原因还是其他各种各样的槽点,学了准没错。更何况现在还出现了TS这个超集。




言归正传,回到 TS 的基础数据类型介绍。


Number(数值型)

可以是整型、浮点型、还有各种进制型等等。
let num = 10; // 整型
let flo = 1.5; // 浮点型
let hex = 0xf000; // 十六进制
let binary = 0b101; // 二进制
let octal = 0o765; // 八进制



String(字符串)

可以用单引号、双引号、反引号(数字1左边,tab键上面的那个键)括着
let str = 'Hello world';



boolean(布尔型)

只能有 true 和 false。
let t = true;
let f = false;



any

如果一开始不知道赋什么值,可以先定义一个变量。(不建议使用)
let anything;

上面几种是常用的数据类型。

当然,TS 还有数组、元组等数据类型,这可以单独拿出来讨论。






标准写法(建议使用下面的写法)

上面几种写法,其实是简写形式。

如果是按照非常标准的写法,可以用下面的方式书写。

let num: number = 20; // 等同于 let num = 20;

let str: string = 'hello ts'; // 等同于 let str = 'hhello ts';

let t: boolean = true; // 等同于 let t = true;

let anything: any; // 等同于 let anything;

在变量名后,会有一个类型注解。

这个类型注解相当于强类型语言中的类型声明,能起到一定的约束作用。

语法:

(变量/函数) : type





重新赋值

TS 中的变量,当然也可以重新赋值,不然也不能叫变量。

但 TS 的重新赋值是比 JS 更为严格的。

在 TS 中,变量类型一旦定义,就不能通过隐式的方式进行更改。

正确的重新赋值

let num = 1;
num = 2;


let str = 'hello';
str = 'ts';


let result = true;
result = false;


// any类型的变量,值和类型都能随便更改。
// 在 TS 中一般不建议使用 any 类型,因为这样就和 JS 没太大区别了。
let anything;
anything = 123;
anything = 'rabbit';
anything = true;


错误的重新赋值

let num = 1;
num = '1'; // 因为 num 是数值类型,重新赋值成 字符串类型 就会报错。

let result = true;
result = 1; // 在 JS 中,非0即为真。但在 TS 里,Boolean类型只允许使用 true 和 false。

再重复一遍,在 TS 中,变量类型一旦定义了就不能通过这种隐式的方式改变。





TypeScript 的数据类型

  • Number
  • String
  • Boolean
  • undefined
  • null
  • Array
  • Function
  • Object
  • void
  • any
  • never
  • 元组
  • 枚举
  • 其他高级类型
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念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

推荐阅读更多精彩内容