前言

  • 原文地址:https://flaviocopes.com/typescript/
  • 原文作者:Flavio
  • 译者:Timbok
  • 翻译工具:Google Translate

本文首发于我的个人网站: Timbok.top

正文

什么?都2019了,你还不会TypeScirpt?别担心,我也不会,前几天看到一篇写的很好的入门文章,翻译一下,一起学习。

TypeScript是2018年发展最快的技术之一。它无处不在,每个人都在谈论它。本文将指导您了解其关键概念

过去几年中,很少有技术能有TypeScript这么大的影响。
让我添加一些证据,支持TypeScript。

在“The State of JavaScript 2018”调查中,近50%的受访者表示他们使用TypeScript,并会再次使用它。超过30%的人表示他们想学习它。对此感兴趣的人中有很大一部分。

TypeScript是由微软创建的,它对于创建编程语言并不陌生,其创建者之一是Anders Hejlsberg,一位以Turbo Pascal(❤️)和Delphi而闻名的丹麦软件工程师。我把心思放在Turbo Pascal上,因为Pascal是我的第一个编程语言,我们在学校使用了Turbo Pascal。

它是一种开源语言,在https://github.com/Microsoft/TypeScript上公开开发。

Angular是使用TypeScript的,据说Vue.js使用TypeScript制作3.0版本。Node.js的创建者Ryan Dahl也说了很多关于它的事情。

我认为这些东西有助于你清晰认识TypeScript。这不仅仅是一种随机的JavaScript风格,将在下个月消亡,它绝对会留下来。事实上,这意味着您可能需要在未来的项目或下一个工作中使用它。也许它会帮助你找到一份工作,所以让我们深入研究它。

编写并编译您的第一个TYPESCRIPT文件

TypeScript开始很容易。如果您曾经写过一行JavaScript,那么您已经编写了TypeScript代码!

我所做的这个奇怪的陈述是TypeScript成功的原因之一:它是JavaScript的严格超集。

这有点像SCSS的CSS。

特别是,它是ECMAScript 2015(也称为ES6)的超集。这意味着任何有效的JavaScript也是有效的TypeScript。

TypeScript的许多功能都等同于JavaScript。例如变量,模块系统,迭代器等。

所以,没有必要编写绝对的第一个TypeScript文件,因为你已经在你不知道的情况下写过,让我们通过显式制作一个TypeScript文件来制作一个“hello world!”,并将其编译成JavaScript。

运行npm install -g typescript以全局安装可使用tsc命令使用的TypeScript编译器。

创建一个新文件夹,然后创建一个app.ts文件。.ts是TypeScript文件扩展名。

写下第一个程序:

const greet = () => {console.log('Hello world!')
}greet()

这只是普通的JavaScript,但存储在一个.ts文件中。

现在使用编译程序tsc app.ts。结果将是一个新的JavaScript文件:app.js,包含以下内容:

var greet = function () {console.log('Hello world!');
};
greet();

TypeScript代码已编译为JavaScript。JavaScript代码稍有改动,例如你可以注意到它添加了分号,var用来代替const和使用常规函数而不是箭头函数。

它看起来像旧的 JavaScript,对吗?这是因为TypeScript默认编译为ES5,因为这是几乎可以保证在所有现代浏览器中都支持的ECMAScript版本。您可以将编译目标更改为其他版本,例如编译为ES2018:tsc app.ts --target ES2018

const greet = () => {console.log('Hello world!');
};
greet();

看,这里几乎没有改变我们的原始.ts文件,除了额外的分号。

有一个非常方便的网站,可让您在https://www.typescriptlang.org/play/上使用TypeScript到JavaScript编辑。

类型

到目前为止,我们编译了一个.ts文件,但我们只编译了纯JavaScript。

您看到了TypeScript的第一个功能:您可以使用现代JavaScript并将其编译为ES5(或更高版本),这是Babel所做的。我们还没有使用任何TypeScript功能。

TypeScript提供的最重要的功能是类型系统:静态类型,接口,类型推断,枚举,混合类型,泛型,联合/交集类型,访问修饰符,空检查。

如果你曾经使用过类型语言,比如Go或C,你已经知道它是如何工作的。如果没有,并且您只使用Python或Ruby这样的动态语言进行编程,这对您来说是全新的,但不要担心。

例如,类型系统允许您向变量,函数参数和函数返回类型添加类型,从而为程序提供更严格的结构。我们编译的JavaScript代码没有类型,它们在编译阶段会丢失。

以下是在TypeScript中定义字符串变量的方法:

const greeting : string = "hello!"

类型推断让我们避免在明显的情况下编写类型:

const greeting = "hello!"

类型由TS确定。

这是函数接受特定类型的参数的方式:

const multiply = (a: number, b: number) => {return a * b
}

如果传递一个字符串给multiply(),编译器会给你一个错误。

以下是函数声明其返回值的方式:

const multiply = (a: number, b: number): number => {return a * b
}

有效类型是

  • number
  • string
  • boolean
  • enum
  • void
  • null
  • undefined
  • any
  • never
  • Array
  • tuple

any 是一种全能类型,如其名称所示,可识别任何类型。

ES2015 / ES6为JavaScript 添加了类,作为原型继承的简单语法糖。

无论喜欢与否,在引擎盖下,JavaScript仍然使用原型继承,具有其独特的功能和怪癖。

TypeScript类与JavaScript类略有不同。原因是TypeScript在JavaScript之前引入了类(它们是在ES2015 / ES6中引入的)。

就像在JavaScript中一样,您以这种方式声明类:

class Car {}

默认情况下,所有字段都是公开 您可以将字段设置为私有或受保护:

class Car {public color: stringprivate name: stringprotected brand: string
}

就像在其他编程语言中发生的那样,私有字段只能在声明它们的类中访问。受保护的字段也只能通过派生类来访问。

您还可以声明静态字段,它们是类字段而不是对象字段:

class Car {static numberOfWheels = 4
}

您可以使用构造函数初始化字段:

class Car {color: stringconstructor(theColor: string) {this.color = theColor}
}

这种简写语法使其更简单:

class Car {constructor(public color: string) {}printColor() {alert(this.color)}
}(new Car('red')).printColor()

字段也可以是只读的:

class Car {readonly color: string
}

在这种情况下,它的值只能在构造函数中设置。

类具有方法:

class Car {color: stringconstructor(public color: string) {this.color = color}drive() {console.log('You are driving the car')}
}

与纯JavaScript一样,您可以使用new关键字从这些类创建对象:

const myCar = new Car('red')

并且您可以使用extend关键字扩展现有类:

class ElectricCar extends Car {//...
}

您可以在构造函数和方法中调用super()来调用扩展类对应的方法

类可以定义为抽象,这意味着需要有一个扩展它的类,并实现其最终的抽象方法:

abstract class Car {abstract drive()
}class SportsCar extends Car {drive() {console.log('You are driving a sports car')}
}

访问器

字段可以有gettersetter。例:

class Car {private _color: stringget color(): string {return this._color}set color(color: string) {this._color = color}
}

接口

接口基于基本类型构建。您可以将接口用作类型,并且此接口可以包含其他类型定义:

interface SetOfNumbers {a: number;b: number;
}const multiply = (set: SetOfNumbers) => {return set.a * set.b
}multiply({ a:1, b: 2 })

接口也可以是类实现的接口:

interface Car {name: 'string'new (brand: string)drive(): void
}class SportsCar implements Car {public nameconstrutor(public brand: string) {//...}drive() {console.log('You are driving a sports car')}
}

函数特点

函数可以使用?来表明参数类型可选:

class Car {drive(kilometers?: number) {if (kilometers) {console.log(`Drive the car for ${kilometers} kilometers`)} else {console.log(`Drive the car`)}}
}

参数也可以有默认值:

class Car {drive(kilometers = 10) {console.log(`Drive the car for ${kilometers} kilometers`)}
}

函数可以使用...接受不同数量的参数:

class Car {drive(kilometers = 10, ...occupants: string[]) {console.log(`Drive the car for ${kilometers} kilometers, with those people on it:`)occupants.map((person) => console.log(person))}
}
(new Car()).drive(20, 'Flavio', 'Roger', 'Syd')

枚举

枚举是定义命名常量的一种很好的方法,遗憾的是,它不受JavaScript支持,但是被其他语言推广。

TypeScript为我们提供了枚举:

enum Order {First,Second,Third,Fourth
}

TS在内部为每个值分配唯一标识符,我们可以简单地引用Order.FirstOrder.Second依此类推。

您可以显式地为常量指定值:

enum Order {First = 0,Second = 1,Third = 2,Fourth = 3
}

或者也使用字符串:

enum Order {First = 'FIRST',Second = 'SECOND',Third = 'THIRD',Fourth = 'FOURTH'
}

泛型

泛型是许多不同编程语言的一部分。简而言之,您可以创建一个使用不同类型的函数,接口或类,而无需预先指定类型。

但是在编译时,如果你开始使用一个类型的函数,然后你改变类型(例如从数字到字符串),编译器将抛出一个错误。

我们可以通过省略类型或使用any类型来实现这一点,但是使用泛型,所有工具都能够帮助我们

示例语法:

function greet<T>(a : T) {console.log(`Hi ${a}!`)
}
greet('Flavio')

有趣的T符号标识通用类型。

可以使用以下extends关键字将类型限制为某个类或接口:

interface Greetable { name: string }
function greet<T extends Greetable>(a : T) {alert(`Hi ${a.name}!`)
}
greet({ name: 'Flavio'})

总结

这些都是TypeScript的基础知识。详细学习地址:

  • 中文文档:https://github.com/zhongsp/TypeScript
  • 英文文档:http://www.typescriptlang.org/docs/home.html

能力有限,水平一般,翻译不妥之处,还望指正。感谢。

TypeScript入门指南(译文)相关推荐

  1. TypeScript入门指南:从JS到TS的转变

    文章目录 引言 为什么需要使用 TypeScript? 简单认识一下 TypeScript 的基础语法 1. 类型注解 2. 接口 3. 类 4. 泛型 5. 枚举 从JS到TS的转变策略 总结 引言 ...

  2. TypeScript入门指南(基础篇)

    写在前面 ts是拥有类型系统的js的超集,近年来非常火热.可以这么说,ts才是真正意义上的js.虽然ts的官方文档非常全面,但是对于原来没有接触过ts的同学来说,全篇通读下来需要耗掉不少时间,这篇文章 ...

  3. 【翻译转载】【官方教程】Asp.Net MVC4入门指南(2):添加一个控制器

    2. 添加一个控制器 · 原文地址:http://www.asp.net/mvc/tutorials/mvc-4/getting-started-with-aspnet-mvc4/adding-a-c ...

  4. Asp.Net MVC4入门指南(3):添加一个视图

    在本节中,您需要修改HelloWorldController类,从而使用视图模板文件,干净优雅的封装生成返回到客户端浏览器HTML的过程. 您将创建一个视图模板文件,其中使用了ASP.NET MVC ...

  5. [译]函数式响应编程入门指南

    原文地址:An Introduction to Functional Reactive Programming 原文作者:Daniel Lew 译文出自:掘金翻译计划 本文永久链接:github.co ...

  6. Maven入门指南(一)

    原文链接  译文链接  译者:nkcoder  校对:方腾飞 Maven介绍: Maven是一个强大的Java项目构建工具.当然,你也可以使用其它工具来构建项目,但由于Maven是用Java开发的,因 ...

  7. nginx指定配置文件启动_【第1717期】Nginx入门指南

    前言 Nginx有在部署早读课网站的时候用到,平时用的不多,又是一个可以顺便了解的知识点.那个@李晓云,这篇是你想了解的吗?今日早读文章由@慕小白翻译分享. 正文从这开始-- 这份指南是对nginx的 ...

  8. 最全的TypeScript学习指南

    大家好,今天给大家带来 某机构教研总监陆神的开年之作<最全TypeScript学习指南>可以说是非常的细致.全面 TypeScript 是由微软2012年推出的,自由和开源的编程语言.这门 ...

  9. (译)一个完整的Django入门指南---第7部分

    1.前言 本篇文章是翻译 A Complete Beginner's Guide to Django 系列的最后一篇文章 A Complete Beginner's Guide to Django - ...

最新文章

  1. Google CEO Sundar Pichai :“谷歌最大的威胁就是自身的成功”
  2. iOS 版 Skype支持群组语音聊天
  3. rosdep init和rosdep update出错处理
  4. 智能合约WASM语言 (1)概述
  5. HDU 4549 M斐波那契数列
  6. 【Android】invalidte和draw的方向
  7. 最常问的MySQL面试题集合
  8. oracle集,oracle(集合门类)
  9. android 打印流程图,Android实现Activities之间进行数据传递的方法
  10. 史上最拉风年货?苏宁门店私人飞机开售 网友:这个真香不了吧
  11. 高分选手讲解:如何突破思维圈限,从NLP角度挖掘新的解题思路
  12. 2018蓝桥C++B:煤球数目;生日蜡烛(枚举年龄和枚举次数)
  13. 全网首发:无线网桥的延迟太大,有时达到10秒以上
  14. (5.2.1)配置服务器参数——即时文件初始化(IFI)
  15. python程序员真实收入曝光_行!看到抖音上Python程序员晒得工资条,我沉默了.........
  16. 浅谈桌面应用程序的开发
  17. 数据结构与算法-初识树和图
  18. 【图文排版】微信文章怎样可以合理布局?
  19. PPT处理福音!Aspose.Slides最新版实现自主的跨平台3D引擎
  20. 关于零点和极点的讨论

热门文章

  1. Java内存泄露8种情况的总结
  2. SQL性能第2篇:查询分析和访问路径制定
  3. 简单工厂和 工厂设计模式--抽象工厂模式--Java实现
  4. 分析go程序内存逃逸情况
  5. encoding/json 方法Marshal的说明
  6. undefined reference to `__isnanf'
  7. 内存对齐 | 原来字段顺序还能影响结构体占用的内存空间
  8. leetcode: 451. Sort Characters By Frequency
  9. shell中四大循环介绍及使用
  10. nginx与PHP配置