Ts -- translation

本文是对《Effective TypeScript》中归纳总结(Things to Remember)的翻译

1. 理解TypeScript与JavaScript的关系

Item 1:Understand the Relationship Between TypeScript and JavaScript

TypeScript is a superset of JavaScript. In other words, all JavaScript programs are already TypeScript programs. TypeScript has some syntax of its own, so TypeScript programs are not, in general, valid JavaScript programs.

  1. TypeScript是JavaScript的超集。换言之,所有的JavaScript程序都是TypeScript程序。TypeScript有自己独特的语法,所以通常情况下TypeScript程序不是有效的JavaScript程序

TypeScript adds a type system that models JavaScript’s runtime behavior and tries to spot code which will throw exceptions at runtime. But you shouldn’t expect it to flag every exception. It is possible for code to pass the type checker but still throw at runtime.

  1. TypeScript增加了类型系统用来模拟JavaScript的运行时行为,它可以将一些JavaScript运行时才会抛出的异常,在编码阶段抛出。但是你不要指望它能够抛出所有异常,有些代码运行时异常的代码仍可能通TypeScript的类型检查

While TypeScript’s type system largely models JavaScript behavior, there are some constructs that JavaScript allows but TypeScript chooses to bar, such as calling functions with the wrong number of arguments. This is largely a matter of taste.

  1. TypeScript很大程度上模拟了JavaScript的行为,但仍有一些JavaScript允许的结构,TypeScript不允许,比如调用函数时,传入与定义时数量不同的参数。这些很大程度上取决于开发者的喜好。

2. 了解你使用的Ts配置

Item 2: Know Which TypeScript Options You’re Using

The TypeScript compiler includes several settings which affect core aspects of the language.

Ts编译器有一些配置会直接影响到这门语言的核心部分。

Configure TypeScript using tsconfig.json rather than command-line options.

配置Ts规则时优先使用tsconfig.json配置文件而不是通过命令行设置。

Turn on noImplicitAny unless you are transitioning a JavaScript project to TypeScript.

除非你是在Js转Ts的过程中,否则请务必启用noImplicitAny。

Use strictNullChecks to prevent “undefined is not an object”-style runtime errors.

避免运行时出现“undefined is not an object”类似的报错,请启用strictNullChecks。

Aim to enable strict to get the most thorough checking that TypeScript can offer.

为了获得Ts能够提供的最彻底的检查,请启用严格模式

3. 生成的代码不包含类型

Item 3: Understand That Code Generation Is Independent of Types

Code generation is independent of the type system. This means that TypeScript types cannot affect the runtime behavior or performance of your code.

代码的生成是独立于类型系统的,也就是说Ts的类型是不影响你代码运行时的行为的

It is possible for a program with type errors to produce code (“compile”).

有Ts报错的代码也是可以正常编译生成Js代码的。

TypeScript types are not available at runtime. To query a type at runtime, you need some way to reconstruct it. Tagged unions and property checking are common ways to do this. Some constructs, such as class, introduce both a TypeScript type and a value that is available at runtime.

Ts的类型在运行时是无法获取的。如果你想在运行时判断类型,你需要重构它们。通常我们使用有标记的联合类型(Tagged unions)或者通过检查属性来判断。有些结构,比如说class,既能够表示Ts类型,也能够在运行时作为值存在。

4. 适应Structural Typing

Understand that JavaScript is duck typed and TypeScript uses structural typing to model this: values assignable to your interfaces might have properties beyond those explicitly listed in your type declarations. Types are not “sealed.”

JavaScript是鸭子类型的,TypeScript使用structural typing进行了模拟:一些兼容于你的接口的值可能含有你接口显示定义好的属性之外的属性。TypeScript的类型并非密封的。

Be aware that classes also follow structural typing rules. You may not have an instance of the class you expect!

TypeScript的类也是遵循structural typing规则的,所以你获取到的实例可能并非来自于你期望的类

Use structural typing to facilitate unit testing.

structural typing有助于写单元测试

5. 尽量少用any

Item 3: Limit Use of the any Type

The any type effectively silences the type checker and TypeScript language services. It can mask real problems, harm developer experience, and undermine confidence in the type system. Avoid using it when you can!

any类型能有效地让类型检查以及Ts的所有服务闭嘴。它会掩盖真实存在的问题,导致开发者的体验感不好,降低对类型系统的信心。所以,请尽可能避免使用any

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,186评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,858评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,620评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,888评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,009评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,149评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,204评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,956评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,385评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,698评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,863评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,544评论 4 335
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,185评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,899评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,141评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,684评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,750评论 2 351

推荐阅读更多精彩内容