TypeScript$Prepare-WhyTypeScript

34 阅读2分钟

TypeScript$Prepare-WhyTypeScript

1. JavaScript 动态类型和弱类型

JavaScript 的类型:

  • 动态类型语言 dynamic language:变量的类型是可以改变的
  • 弱类型语言 weakly typed language:在需要 a 类型的地方使用 b 类型,值会自动转换成 a 类型(symbol 和 bigint 不会隐式转换,如果类型错误将会报错)

动态类型的好处是可以少写一些代码——一个变量 x 本来存的是 string 类型的数据,后来需要一个 number 类型的数据,就可以把 number 的值赋给这个变量。(真的应该这样做吗?x 到底是什么呢?)

弱类型的好处是语言会帮你解决一些类型的问题——本来 x 是 string,后来一个函数需要 number,我们把 x 传过去,这个函数自己就把 x 转换成 number 了。(我们可能主动地利用弱类型这一特点,也可能是在不知情的情况下利用了这一点。还是那个问题:x 到底是什么呢?就效果而言,有时候是 string,有时候是 number。这种多样性好吗?)

动态类型使得一个变量本身的类型不 100% 确定。弱类型使得在需要值的地方,变量的真实类型不确定。这两种不确定性降低了程序的可读性,增加了程序出错的可能性,降低了编程人员的信心。

2. Why TypeScript

TypeScript 要求变量的类型确定。 好处是:

  1. 明确了编程人员的意图:编写时需要明确的表明变量的类型,这意味着编程人员真的知道自己在做什么。
  2. 便于阅读:这些类型就像是 comments,能够更加清晰的表达意图。Leave more of their intent “on the page”.
  3. 便于使用:使用时编辑器能提示值的信息。TypeScript moves some kinds of common programming errors from runtime to compile time.

想象一下你在使用一个函数 function queryApi(obj) {},你输入了 queryApi(。这时你期望编辑器能告诉你参数是什么。如果没使用 TypeScript,编译器可能只能告诉你你需要一个 Object;如果通过 TypeScript 定义了 obj 的类型,你就清楚了需要传入的对象的各个属性(及其类型)。

3. What is TypeScript

TypeScript is JavaScript with syntax for types.

  • Compiles to clean, readable JS
  • Three parts: Language, Language Server and Compiler
  • Kind of like a fancy linter — helps purely at build time

Links

TypeScriptOrg