首页 > 其他分享 >TypeScript:特征

TypeScript:特征

时间:2022-09-26 18:55:35浏览次数:60  
标签:TypeScript 特征 JavaScript 语法 版本 类型 Stage

类型系统:

1.TypeScript是静态类型:
类型系统按照「类型检查时机」来分类,可以分为动态类型和静态类型。
动态类型是指在运行时才会进行类型检查,这种语言的类型错误往往会导致运行时错误。JS是一门解释型语言,没有编译阶段,所以JS是动态类型。

2.TypeScript 是弱类型:
类型系统按照「是否允许隐式类型转换」来分类,可以分为强类型和弱类型,TS是完全兼容JS的,它不会修改JS运行时的特性,所以它们都是弱类型。

例子:

console.log(1 + '1');
// 打印出字符串 '11', ts和js都不会报错

print(1 + '1')
Python 是强类型会报错
# TypeError: unsupported operand type(s) for +: 'int' and 'str'

适用于任何规模

1.TypeScript 非常适用于大型项目——这是显而易见的,类型系统可以为大型项目带来更高的可维护性,以及更少的 bug。

2.在中小型项目中推行 TypeScript 的最大障碍就是认为使用 TypeScript 需要写额外的代码,降低开发效率。但事实上,由于有[类型推论],大部分类型都不需要手动声明了。相反,TypeScript 增强了编辑器(IDE)的功能,包括代码补全、接口提示、跳转到定义、代码重构等,这在很大程度上提高了开发效率。而且 TypeScript 有近百个[编译选项],如果你认为类型检查过于严格,那么可以通过修改编译选项来降低类型检查的标准。

3.TypeScript 还可以和 JavaScript 共存。这意味着如果你有一个使用 JavaScript 开发的旧项目,又想使用 TypeScript 的特性,那么你不需要急着把整个项目都迁移到 TypeScript,你可以使用 TypeScript 编写新文件,然后在后续更迭中逐步迁移旧文件。如果一些 JavaScript 文件的迁移成本太高,TypeScript 也提供了一个方案,可以让你在不修改 JavaScript 文件的前提下,编写一个[类型声明文件],实现旧项目的渐进式迁移。

4.就算你从来没学习过 TypeScript,你也可能已经在不知不觉中使用到了 TypeScript——在 VSCode 编辑器中编写 JavaScript 时,代码补全和接口提示等功能就是通过 TypeScript Language Service 实现的

5.一些第三方库原生支持了 TypeScript,在使用时就能获得代码补全了,比如 Vue 3.0 React

与标准同步

1.TypeScript 的另一个重要的特性就是坚持与 ECMAScript 标准同步发展。

ECMAScript 是 JavaScript 核心语法的标准,自 2015 年起,每年都会发布一个新版本,包含一些新的语法。

一个新的语法从提案到变成正式标准,需要经历以下几个阶段:

Stage 0:展示阶段,仅仅是提出了讨论、想法,尚未正式提案。
Stage 1:征求意见阶段,提供抽象的 API 描述,讨论可行性,关键算法等。
Stage 2:草案阶段,使用正式的规范语言精确描述其语法和语义。
Stage 3:候选人阶段,语法的设计工作已完成,需要浏览器、Node.js 等环境支持,搜集用户的反馈。
Stage 4:定案阶段,已准备好将其添加到正式的 ECMAScript 标准中。
一个语法进入到 Stage 3 阶段后,TypeScript 就会实现它。一方面,让我们可以尽早的使用到最新的语法,帮助它进入到下一个阶段;另一方面,处于 Stage 3 阶段的语法已经比较稳定了,基本不会有语法的变更,这使得我们能够放心的使用它

2.TypeScript 的发展历史
2012-10:微软发布了 TypeScript 第一个版本(0.8),此前已经在微软内部开发了两年。
2014-04:TypeScript 发布了 1.0 版本。
2014-10:Angular 发布了 2.0 版本,它是一个基于 TypeScript 开发的前端框架。
2015-01:ts-loader 发布,webpack 可以编译 TypeScript 文件了。
2015-04:微软发布了 Visual Studio Code,它内置了对 TypeScript 语言的支持,它自身也是用 TypeScript 开发的。
2016-05:@types/react 发布,TypeScript 可以开发 React 应用了。
2016-05:@types/node 发布,TypeScript 可以开发 Node.js 应用了。
2016-09:TypeScript 发布了 2.0 版本。
2018-06:TypeScript 发布了 3.0 版本。
2019-02:TypeScript 宣布由官方团队来维护 typescript-eslint,以支持在 TypeScript 文件中运行 ESLint 检查。
2020-05:Deno 发布了 1.0 版本,它是一个 JavaScript 和 TypeScript 运行时。
2020-08:TypeScript 发布了 4.0 版本。
2020-09:Vue 发布了 3.0 版本,官方支持 TypeScript。

 

不足

1.有一定的学习成本,需要理解接口(Interfaces)、泛型(Generics)、类(Class)、枚举类型(Enums)等前端工程师可能不是很熟悉的概念;
2.短期可能会增加一些开发成本,毕竟要多写一些类型的定义,不过对于一个需要长期维护的项目,TypeScript 能够减少其维护成本;
3.集成到构建流程需要一些工作量;ts-loader
4.可能和一些库结合的不是很完美;

标签:TypeScript,特征,JavaScript,语法,版本,类型,Stage
From: https://www.cnblogs.com/LIXI-/p/16731976.html

相关文章

  • TypeScript 的一些编译选项
    compilerOptionsstrict231forceConsistentCasingInFileNames231noImplicitOverride231noPropertyAccessFromIndexSignature231noImplicitRe......
  • YApi to TypeScript(简称 ytt)根据swagger生成api代码放入项目中
    这个工具每次执行脚本内容都会覆盖代码文件,他可以用于yapi和swagger,关于yapiapi的教程可以查看官方文档,https://fjc0k.github.io/yapi-to-typescript/handbook/这里主要......
  • TypeScript学习笔记(三)—— 编译选项、声明文件
    一、编译选项与配置文件自动编译文件编译文件时,使用-w指令后,TS编译器会自动监视文件的变化,并在文件发生变化时对文件进行重新编译。示例:tscxxx.ts-w......
  • [Typescript] Tips: Derive a union type from an object
    constfruitCounts={apple:12,banana:23}typePropUnion<TextendsRecord<PropertyKey,any>>={[KinkeyofT]:{[K2inK]:T[K2]}}[keyof......
  • 图像特征提取
    1、角点的定义如果一个点在任意方向的微小变动都会导致灰度很大的变化,那么这个点就被称为角点。也就是一阶导数中的局部最大值就是角点。2、Harris角点检测harris角点具......
  • [Typescript] 37. Medium - KebabCase *
    Replacethe camelCase or PascalCase stringwith kebab-case.FooBarBaz -> foo-bar-bazForexampletypeFooBarBaz=KebabCase<"FooBarBaz">;constfoobarb......
  • TypeScript type 关键字
    联合类型、对象类型等都有可能不止用一次,type关键字给类型声明一个别名,就不需要再次声明同样的类型,直接引用类型别名。我在某个时候写了一个函数,其签名param是一个联合......
  • 二、typescript类(一)属性和方法
    一、概述:1.类的创建:使用class关键字定义一个类;1classPersion{2}2.对象中主要包含了两个部分:属性 方法3.属性可以分为:静态属性和实例属性;直接定义的属性......
  • Typescript类型体操 - BEM style string
    题目中文Block,Element,Modifier方法(BEM)是CSS中类的流行命名约定。例如,块组件用btn表示,依赖于块的元素用btn__price表示,更改块样式的修饰符将用btn--big或者btn......
  • [Typescript] 36. Medium - Merge
    Mergetwotypesintoanewtype.Keysofthesecondtypeoverrideskeysofthefirsttype.Forexampletypefoo={name:string;age:string;}typecoo=......