TypeScript 手册

关于本手册

¥About this Handbook

在被引入编程社区 20 多年后,JavaScript 现在是有史以来最广泛使用的跨平台语言之一。JavaScript 最初是一种用于向网页添加微不足道的交互性的小型脚本语言,现已发展成为各种规模的前端和后端应用的首选语言。虽然用 JavaScript 编写的程序的大小、作用域和复杂性呈指数级增长,但 JavaScript 语言表达不同代码单元之间关系的能力却没有。结合 JavaScript 相当特殊的运行时语义,语言和程序复杂性之间的这种不匹配使得 JavaScript 开发成为一项难以大规模管理的任务。

¥Over 20 years after its introduction to the programming community, JavaScript is now one of the most widespread cross-platform languages ever created. Starting as a small scripting language for adding trivial interactivity to webpages, JavaScript has grown to be a language of choice for both frontend and backend applications of every size. 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.

程序员编写的最常见的错误类型可以描述为类型错误:在期望不同类型的值的地方使用了某种类型的值。这可能是由于简单的拼写错误、未能理解库的 API 表面、对运行时行为的错误假设或其他错误。TypeScript 的目标是成为 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).

如果你在没有 JavaScript 背景的情况下使用 TypeScript,并且打算将 TypeScript 作为你的第一语言,我们建议你首先开始阅读有关 Microsoft Learn JavaScript 教程 或阅读 Mozilla 网络文档中的 JavaScript 的文档。如果你有其他语言的经验,你应该能够通过阅读手册很快掌握 JavaScript 语法。

¥If you are coming to TypeScript without a JavaScript background, with the intention of TypeScript being your first language, we recommend you first start reading the documentation on either the Microsoft Learn JavaScript tutorial or read JavaScript at the Mozilla Web Docs. If you have experience in other languages, you should be able to pick up JavaScript syntax quite quickly by reading the handbook.

本手册的结构

¥How is this Handbook Structured

手册分为两部分:

¥The handbook is split into two sections:

  • 入门教程

    ¥The Handbook

    TypeScript 手册旨在成为向日常程序员解释 TypeScript 的综合文档。你可以在左侧导航中从上到下阅读手册。

    ¥The TypeScript Handbook is intended to be a comprehensive document that explains TypeScript to everyday programmers. You can read the handbook by going from top to bottom in the left-hand navigation.

    你应该期望每一章或每一页都能为你提供对给定概念的深刻理解。TypeScript 手册不是一个完整的语言规范,但它旨在成为该语言所有特性和行为的综合指南。

    ¥You should expect each chapter or page to provide you with a strong understanding of the given concepts. The TypeScript Handbook is not a complete language specification, but it is intended to be a comprehensive guide to all of the language’s features and behaviors.

    完成演练的读者应该能够:

    ¥A reader who completes the walkthrough should be able to:

    • 阅读并理解常用的 TypeScript 语法和模式

      ¥Read and understand commonly-used TypeScript syntax and patterns

    • 解释重要编译器选项的影响

      ¥Explain the effects of important compiler options

    • 在大多数情况下正确预测类型系统行为

      ¥Correctly predict type system behavior in most cases

    为清晰和简洁起见,本手册的主要内容不会探讨所涵盖功能的所有边缘情况或细节。你可以在参考文章中找到有关特定概念的更多详细信息。

    ¥In the interests of clarity and brevity, the main content of the Handbook will not explore every edge case or minutiae of the features being covered. You can find more details on particular concepts in the reference articles.

  • 参考文件

    ¥Reference Files

    导航中手册下方的参考部分旨在提供对 TypeScript 特定部分如何工作的更丰富的理解。你可以从上到下阅读,但每个部分都旨在对单个概念提供更深入的解释 - 这意味着没有连续性的目标。

    ¥The reference section below the handbook in the navigation is built to provide a richer understanding of how a particular part of TypeScript works. You can read it top-to-bottom, but each section aims to provide a deeper explanation of a single concept - meaning there is no aim for continuity.

非目标性

¥Non-Goals

该手册还旨在成为一份简洁的文档,可以在几个小时内轻松阅读。为了简短起见,某些主题不会被涵盖。

¥The Handbook is also intended to be a concise document that can be comfortably read in a few hours. Certain topics won’t be covered in order to keep things short.

具体来说,该手册没有完全介绍核心 JavaScript 基础知识,如函数、类和闭包。在适当的情况下,我们将包含指向背景阅读的链接,你可以使用这些链接来阅读这些概念。

¥Specifically, the Handbook does not fully introduce core JavaScript basics like functions, classes, and closures. Where appropriate, we’ll include links to background reading that you can use to read up on those concepts.

该手册也不打算替代语言规范。在某些情况下,将跳过边缘情况或对行为的正式描述,转而采用更易于理解的高级解释。相反,有单独的参考页面更准确、更正式地描述了 TypeScript 行为的许多方面。参考页面不适用于不熟悉 TypeScript 的读者,因此他们可能会使用你尚未阅读的高级术语或参考主题。

¥The Handbook also isn’t intended to be a replacement for a language specification. In some cases, edge cases or formal descriptions of behavior will be skipped in favor of high-level, easier-to-understand explanations. Instead, there are separate reference pages that more precisely and formally describe many aspects of TypeScript’s behavior. The reference pages are not intended for readers unfamiliar with TypeScript, so they may use advanced terminology or reference topics you haven’t read about yet.

最后,除非必要,否则本手册不会涵盖 TypeScript 如何与其他工具交互。诸如如何使用 webpack、rollup、parcel、react、babel、closure、lerna、rush、bazel、preact、vue、Angular、svelte、jquery、yarn 或 npm 配置 TypeScript 等主题超出了范围 - 你可以在网络上的其他地方找到这些资源。

¥Finally, the Handbook won’t cover how TypeScript interacts with other tools, except where necessary. Topics like how to configure TypeScript with webpack, rollup, parcel, react, babel, closure, lerna, rush, bazel, preact, vue, angular, svelte, jquery, yarn, or npm are out of scope - you can find these resources elsewhere on the web.

开始使用

¥Get Started

在开始使用 基础知识 之前,我们建议你阅读以下介绍性页面之一。这些介绍旨在突出 TypeScript 与你喜欢的编程语言之间的主要相似之处和不同之处,并澄清针对这些语言的常见误解。

¥Before getting started with The Basics, we recommend reading one of the following introductory pages. These introductions are intended to highlight key similarities and differences between TypeScript and your favored programming language, and clear up common misconceptions specific to those languages.

否则,跳转到 基础知识

¥Otherwise, jump to The Basics.