likes
comments
collection
share

跟着阮一峰老师学习typescript 当js有了类型的约束也就成为了成熟的TS

作者站长头像
站长
· 阅读数 22

当js有了类型的约束也就成为了TS,当男孩有了家室也就变成了成熟的男人

哈喽哈喽,大家好,我是你们的金樽清酒。好多天没有写文章了,今天呢,我就给大家分享一下,我看了阮一峰老师写的TS教学得到的体会。

为什么说js有了类型的约束就是TS

其实,什么是TS,TS打造的目的不是为了取代js成为一门新的语言,相反它是为了增强js的功能。其中最核心的部分就是新增加了一个独立的类型系统。正是这个类型的约束,让TS在众多的语言开发中占据主导地位。就像一个男孩子有了家,那必然有了家的约束,不能夜不归宿,要挣钱养家等各种的压力。但同样这也是最主要的动力。有了家人,那就有了奋斗的方向,扛下养家的责任逐渐成为一个成熟有担当的男人。

聊聊js到TS有什么改变。 男孩到男人的改变。

我们都知道js是一门弱数据类型的语言,弱数据类型让它很自由,不受类型的约束,一个变量只有在被赋值的时候才知道它的类型,而且该变量还能被不同类型的值重新赋值。男孩,少年这一词听着就很自由,像风一样,像js一样。同样的代码,在TS当中是会报错的,TS在声明变量的时候就要确定数据类型,也就是说这个变量是number类型就是number类型,不能赋值成其他数据类型。

function addOne(n:number) {
  return n + 1;
}

我们可以看到形参n规定了number类型,如果n不是number类型,则在开发中就会报错,让我们及时看到错误,这其实跟那些强数据类型的语言是一样的,比如c语言,c++语言,java等,都得限定变量的类型。TS有了类型的限定,才有了它更加健壮的报错机制。少年成了家后,逐渐承担起来了责任,变成了更加成熟稳重的人。

所以,js到ts最大的标志就是增加了类型判断。男孩变成了男人是因为扛起了家的责任。

动态类型与静态类型

什么是动态类型和静态类型呢?举个例子,一个男孩他是动态的,很自由,今天可能喜欢这个女孩子,明天可能喜欢那个女孩子,这个心呀,老是飘忽不定的,这就是我们说的动态,说的不好听,就是渣一点,但是自在呀,看看我们的js。变量只有被赋值时才知道类型,而且可以被重复定义,而且不同类型的值还可以被运算符所操作,也就是说js变量的类型是动态的,不定的,而相反成熟的男人有了家的责任就不会那么朝三暮四,而且作为一个好男人更应该从一而终,我们的TS就是这个样子的,TS的变量在定义时就确定好了类型,在后续只能被重新赋值为该种类型的值,不然就会出现报错,在开发阶段就找到错误。这种一开始就定义好了类型的就叫做静态类型。

动态类型的优点
  • 1.便于代码的静态分析。 在开发阶段,我们就可以确定每一个数据类型,从而判断代码有没有错。这对于大型项目来说是很重要的,在开发阶段就能发现问题,避免交付线上的时候出错。
  • 2.有利于发现错误 TS有严格的类型约束,一些js中可能在线上才能发现的bug,在开发阶段就能发现。
let obj = { message: '' };
console.log(obj.messege); // 报错

上面的js代码是不会报错的,但是在ts当中能因为有严格的类型约束,所以可以发现拼写的报错,从而在开发阶段找到问题。

const a = 0;
const b = true;
const result = a + b; // 报错

上面的代码在js中能够运行,但是没有意义。0为什么会和true相加呢?而在ts中不同类型是不能够相加的,从而避免无意义的代码。

function hello() {
  return 'hello world';
}

hello().find('hello'); // 报错

上面的代码js在运行才会报错,而ts在开发环境中就会报错,因为ts在开发阶段就能发现hello中没有find方法。

  • 更好的IDE支持 ts的IDE更加的强大,能做到语法提示和自动补全。

  • 提供了代码文档 类型信息的提供部分代码文档,熟练的开发者可以凭借所知的类型信息知道代码的作用。

  • 有助于重构 修改大项目的js代码,特别的痛苦,往往牵一发而动全身。而类型信息能让我们更加自信的重构。 只要函数或对象的参数和返回值保持类型不变,就能基本确定。越是大型的项目,ts所体现出来的优势就越明显。

动态类型的缺点
  • 丧失了灵活性 ts相对于js来说就没有那么的自由,总有类型的束缚。

  • 提高了代码量 我们在定义变量的同时还要定义它的类型,当项目一大会增加很多的代码量。

  • 更高的学习成本 开发者们需要耗费时间来学习ts,而且ts的类型系统还比较繁琐,而且用习惯了js一段时间内很难转变。

  • 引入了独立的编译步骤

  • 原生的 JavaScript 代码,可以直接在 JavaScript 引擎运行。添加类型系统以后,就多出了一个单独的编译步骤,检查类型是否正确,并将 TypeScript 代码转成 JavaScript 代码,这样才能运行。

  • 兼容性问题。 TypeScript 依赖 JavaScript 生态,需要用到很多外部模块。但是,过去大部分 JavaScript 项目都没有做 TypeScript 适配,虽然可以自己动手做适配,不过使用时难免还是会有一些兼容性问题。

总的来说,这些缺点使得 TypeScript 不一定适合那些小型的、短期的个人项目。

总结

js就像是男孩一样,自由自在,不受类型的约束,但是年轻气盛,不够沉稳,容易犯错。而ts有了类型约束成了了男人,能有效的减少错误,提高代码的维护性和健壮性。所以说ts是js的超集。两者更有优缺点,但是ts的类型机制使得在开发大型项目的时候更占据优势。

转载自:https://juejin.cn/post/7376861773837910053
评论
请登录