文档阅读指北
「这是我参与11月更文挑战的第1天,活动详情查看:2021最后一次更文挑战」。
Getting Start
这里指出了使用JavaScript的一些弊端,
- 随着js代码复杂性的增长,常见的类型错误在原有的js运行环境中无法被检查出来,比如简单的拼写错误之类的到编译环境再去紧急处理会浪费非常多的时间
- 其次,标准的检查规范以及代码规范,也有助于代码更清晰,容易维护
看看原文
While the size, scope, and complexity of programs written in JavaScript has grown exponentially, the ability of the JavaScript language to express the relationships between different units of code has not. Combined with JavaScript’s rather peculiar runtime semantics, this mismatch between language and program complexity has made JavaScript development a difficult task to manage at scale.
虽然用 JavaScript 编写的程序的大小、范围和复杂性都呈指数级增长,但 JavaScript 语言表达不同代码单元之间关系的能力却没有。结合 JavaScript 特有的运行时语义,语言和程序复杂性之间的这种不匹配使得 JavaScript 的开发成为一项难以规模化管理的任务。
The most common kinds of errors that programmers write can be described as type errors: a certain kind of value was used where a different kind of value was expected. This could be due to simple typos, a failure to understand the API surface of a library, incorrect assumptions about runtime behavior, or other errors. The goal of TypeScript is to be a static typechecker for JavaScript programs - in other words, a tool that runs before your code runs (static) and ensures that the types of the program are correct (typechecked).
程序员编写的最常见的错误类型可以描述为类型错误: 在需要不同类型值的地方使用了某种类型的值。这可能是由于简单的拼写错误、未能理解库的 API 表面、对运行时行为的错误假设或其他错误。TypeScript 的目标是成为 JavaScript 程序的一个静态类型检查器——换句话说,一个在代码运行(静态)之前运行的工具,并确保程序的类型是正确的(类型检查)。
手册构建结构
此部分详见文档,主要讲了一些手册部分的模块设置,看手册可以略带过一下,本次阅读暂跳不表。
This Basics
基本知识,阅读文档一般都是从basics开始,翻开基本知识第一页
文档指出, IF第一次打开,则 'Getting Started'(上面第一部分),ELSE(或者看完)可以继续向下
此处讲了一个简单的示例,拆解如下内容
// Accessing the property 'toLowerCase'
// on 'message' and then calling it
message.toLowerCase();
// Calling 'message'
message();
// 从代码示意解释,第一句meaagse的类或者方法中含有toLowerCase这样一个属性或者方法
// 第二句: messag这个方法被直接调用
在此处代码构建中我们会发现一些问题:
- Is message callable?
- 消息是否可调用?
- Does it have a property called toLowerCase on it?
- 它是否有一个名为toLowerCase的属性?
- If it does, is toLowerCase even callable?
- 如果是的话,toLowerCase 还能调用吗?
- If both of these values are callable, what do they return?
- 如果这两个值都是可调用的,他们返回什么
以上问题如果JS拥有类型校验,我们是在研发过程中可以避免的,接下来引入TS对于JS相关问题的处理手段。
Static type-checking
静态类型检查
由于我们根本不希望在代码运行时出现的类型错误(仅仅只是一个简单的拼写,或者是其他“低级”错误),被定义为是Bug,因此我们可以在编写新代码的时候尽最大的可能去解决这个问题。
看看原文
Think back to that TypeError we got earlier from trying to call a string as a function. Most people don’t like to get any sorts of errors when running their code - those are considered bugs! And when we write new code, we try our best to avoid introducing new bugs.
回想一下我们前面试图调用一个字符串作为一个函数时得到的 TypeError。大多数人不喜欢在运行代码时出现任何类型的错误——这些都被认为是 bug!当我们编写新的代码时,我们尽最大努力避免引入新的错误。
...
Non-exception Failures
无例外的故障报告
此部分讲了我们之前讨论的问题,比如运行时错误在Ts的环境下会被类型系统标记,且拥有一套自己的规范,TS会捕捉非常多的合法的漏洞或者一部分情况下的逻辑错误行为。
比如:
- 函数未调用
- 基本逻辑错误等
Types for Tooling 类型工具
一个支持Typescript的编辑器可以提供“快速修复”来自动修复错误、重构代码等方便的重新组织代码,以及相对应的导航功能,方便你快速的跳转到变量的定义,或查找给定变量的所有引用。
看看原文
TypeScript takes tooling seriously, and that goes beyond completions and errors as you type. An editor that supports TypeScript can deliver “quick fixes” to automatically fix errors, refactorings to easily re-organize code, and useful navigation features for jumping to definitions of a variable, or finding all references to a given variable. All of this is built on top of the type-checker and is fully cross-platform, so it’s likely that your favorite editor has TypeScript support available.
Typescript脚本非常重视工具,而且在输入时不仅仅是完成和错误。一个支持打字稿的编辑器可以提供“快速修复”来自动修复错误,重构代码以方便地重新组织代码,以及有用的导航功能,用于跳转到变量的定义,或查找给定变量的所有引用。所有这些都构建在类型检查器之上,并且是完全跨平台的,因此您喜欢的编辑器很可能具有可用的Typescript支持。
tsc, the Typescript compiler
tsc, Typescript 编辑器
npm install -g typescript // 安装完毕可以得到rtsc
直接使用
tsc hello.ts // 可以输出 hello.js 也可以对自己的类型进行调整
Emitting with Errors
发出错误
tsc --noEmitOnError hello.ts // 错误不输出
也可以将noEmitOnError 配置进入tsconfig.json,参数 Boolean
Explicit Types
显示(明确的 )类型
我们可以通过类型描述来显示的约定类型,示例如下
function greet(person: string, date: Date) {
console.log(`Hello ${person}, today is ${date.toDateString()}!`);
}
Erased Types
被擦除的类型
查看tsc输出的类型,你会发现编译后的文件的类型注释不见了,发生了什么呢?
浏览器或常规js解释器不能直接运行Typescript,一般需要一个ts类型的解释器,转换后的代码有关于Typescript的所有特定代码都会被擦除,类型注释之类的也会被完全擦除。
Downleveling
下调水平
TS编译器可以将TS代码转换为较低版本的js类型代码,默认版本ES3,可以在tsconfig.json中配置。
Structness
严格模式
不同用户在TS中的使用习惯不一样,默认TS为严格校验,如果有不同配置需求可以在tsconfig.json的文档中自行适配。
noImplicitAny
隐式类型推断配置
strictNullChecks
严格空验证配置等
至此,TS基础文档已经读完,下节预告 ---- TS日常类型 EveryDay Types部分
-- End --