TypeScript教程

代码狂魔 2018-10-25 17:06:30 ⋅ 1032 阅读

因为工作中用TypeScript,抽个时间,先大致的介绍一些基本知识,完整的学习还是建议从官网教程出发,玩儿的愉快

JavaScript的通用浏览器支持和动态类型特性使其成为理想的通用Web语言。但是,任何来自面向对象背景的开发人员都知道,随着应用程序变得越来越大,JavaScript的灵活性可能成为一种负担。这就是微软创建TypeScript以帮助开发人员利用面向对象编程原理生成更好的JavaScript 的原因。

在本文中,我们将详细介绍TypeScript的内容,并向您展示如何开始使用它。

什么是TypeScript?
TypeScript的好处
第1部分)安装和设置
第2部分)编译为JavaScript
第3部分)静态打字
第4部分)数组
第5部分)接口
第6部分)课程
第7部分)泛型
第8部分)模块和命名空间
第9部分)第三方声明文件

什么是TypeScript?

TypeScript就是所谓的JavaScript超集。它不是JavaScript的替代品,也不会为JavaScript代码添加任何新功能。相反,TypeScript允许程序员在其代码中使用面向对象的构造,然后将其转换为JavaScript。它还包括类型安全和编译时类型检查等便利功能。最重要的是,它是完全免费和开源的。

TypeScript 2.3是截至2017年中期的该语言的最新版本。如果您已经熟悉超集但已经不在循环中,TypeScript 2.0引入了一些重大改进,包括更全面的错误捕获以及直接通过npm install获取声明文件。

虽然TypeScript是由Microsoft开发的,并且是Visual Studio(IDE软件)的标准配置  ,但它可以在任何环境中使用。这个TypeScript教程将为您提供开发Web项目,生成JavaScript代码所需的工具。

使用TypeScript有各种好处,其中一些包括:

1.静态类型,TypeScript代码比JavaScript 更容易预测且更容易调试。
2. 面向对象的功能(如模块和命名空间)使组织大型代码库更易于管理。
3. 编译步骤在到达运行时之前捕获错误。
4. 流行的框架Angular是用TypeScript编写的。虽然您也可以在Angular中使用常规JavaScript,但您在框架中找到的大多数教程都是用TypeScript编写的。任何想要充分利用Angular和类似开发平台的人都会更好地了解TypeScript。
5. TypeScript类似于CoffeeScript,另一种编译为JavaScript的语言,但由于静态类型,前者比后者更灵活。

第1部分)安装和设置

Visual Studio 2017已经配备了TypeScript插件,它包含在Visual Studio 2015的更新3中。如果您使用的是旧版本的Visual Studio或其他环境,则可以获取TypeScript源代码并将其安装为一个Node.js包:

npm install -g typescript

安装后,您可以开始制作TypeScript文件并将其添加到现有应用程序中。可以通过*.ts扩展名识别TypeScript文件。每当您保存TypeScript文件时,Visual Studio插件会自动生成一个具有相同名称的相应JavaScript文件,以供使用。每次创建新的TypeScript项目时,您都会注意到app.ts还生成了包含默认代码实现的文件。

Visual Studio为相应的TypeScript和JavaScript文件提供了精彩的并排视图。每当您保存TypeScript时,您都可以立即看到JavaScript中的更改。

这与您使用codepen.io时类似。使用CodePen,您可以编写TypeScript代码,然后查看已编译的JavaScript。下面是CodePen中一些未编译的TypeScript和已编译的JavaScript代码的并排比较。

image.png

此TypeScript教程中的示例假定您使用的是Visual Studio,但其他几个IDE和文本编辑器也提供TypeScript支持,包括自动完成建议,错误捕获和内置编译器。WebStorm,Vim,Atom,Emacs和Sublime Text都有TypeScript的内置支持或插件。

第2部分)编译为JavaScript

由于.ts文件无法直接在浏览器中使用,因此必须将它们编译为常规JavaScript,这可以通过几种方式实现。除了使用IDE或像Gulp这样的自动任务运行器之外,最简单的方法是使用命令行工具tsc,如下所示:

tsc index.ts

上面的命令会给你一个名为的文件index.js。如果.js已存在具有该名称的文件,则将覆盖该文件。

也可以通过简单地列出它们来一次编译多个文件:

tsc index.ts main.ts

您可以.ts使用以下命令编译当前文件夹中的所有文件,但请记住它不能递归地工作:

tsc * .ts

要在对文件进行更改时自动编译,您可以设置观察程序进程:

tsc index.ts  -  watch

如果你在与许多大型项目的工作.ts文件,它可能有助于创建一个tsconfig.json文件。您可以在TypeScript文档中阅读有关配置文件的更多信息。

第3部分)静态类型

TypeScript的定义功能是将它与JavaScript和CoffeeScript分开,它是静态类型,它允许您声明变量类型。编译器确保为变量分配正确的值类型,并且如果省略类型声明,它甚至可以进行推断。

除了“数字”,“布尔”和“字符串”等几种原始类型之外,您还可以使用名为“any”的动态类型。“Any”类似于C#中的“dynamic”关键字,因为它允许您为变量分配任何类型的值。因此,TypeScript不会标记“任何”变量的类型错误。

变量在TypeScript中声明的方式与它们在JavaScript中的方式相同。您可以通过添加冒号和类型名称来声明类型:

var num:number = 45;

在上面的示例中,变量num已分配类型“number”。您可以阅读TypeScript文档中的所有可用数据类型。

第4部分)数组

使用TypeScript,您可以使用括号创建数组:

var arraystring [] = ['dog''cat'];
var first:string = array [0];

上面的TypeScript会给你以下JavaScript:

var array = ['dog''cat'];
var first = array [0];

如您所见,使用从零开始的索引访问TypeScript中的数组。您还可以使用基本类型构建复杂变量:

var name = {firstName:'Steve',lastName:'Jobs'};

即使您没有像上例中那样明确地为变量指定类型,TypeScript也会推断出“name”是一个带有字符串变量的复杂对象。如果您稍后将任何字符串以外的任何内容分配给这些变量中的任何一个,则会出现设计时错误。

第5部分)接口

定义接口允许您检查变量组合以确保它们使用一致。接口不会转换为JavaScript; 他们唯一的目的是帮助开发者。例如,您可以使用以下属性和类型定义接口:

interface Food {
    name: string;
    calories: number;
}

然后,您可以告诉函数期望适合“Food”界面的对象,以确保始终可以使用正确的属性:

function speak(food: Food): void {
    console.log("This " + food.name + " contains " + food.calories + " calories.");
}

现在,当您定义一个具有“Food”接口所需的所有属性的对象时,将自动推断出类型。如果TypeScript怀疑您犯了错误,编译器会通知您。例如,请使用以下代码:

var cherry_pie = {
    name: "cherry pie",
    caloreis: 500
}

在上面的示例中,我们的某个属性拼写错误,因此您应该会收到如下错误消息:

main.ts(16,7): error TS2345: Argument of type '{ name: string; caloreis: number; }
is not assignable to parameter of type 'Food'.
Property 'calories' is missing in type '{ name: string; caloreis: number; }'.

只要存在所需属性且类型正确,属性顺序无关紧要; 如果不是这种情况,您将收到编译器的警告,如上所述。

第6部分)类

TypeScript中的类与其他面向对象语言中的类大致相同。自ECMAScript 2015更新发布以来,类现在也是JavaScript的原生类,但类的规则在TypeScript中更严格一些。

您可以创建一个简单的TypeScript类,如下所示:

class Menu {
    items: Array<string>
    pages: number;
}

默认情况下,属性是公共的,但可以将它们设为私有。一旦建立了一些类,就可以设置构造函数来简化创建新对象的过程。

您也可以将一起使用的小的类(如Point,Size和Rectangle)组合到一个文件中,而不是为每个类提供自己的文件。尝试将这些组合类保留在150行代码下以避免任何问题。

第7部分)泛型

使用不同类型的变量时,设置泛型可能会有所帮助。泛型是可重用的模板,允许单个函数接受不同类型的参数。由于泛型保留类型,因此该技术优于过度使用“任何”类型变量。

看一下下面的脚本,它接收一个参数并返回一个包含相同参数的数组。函数名后面的“T”表示通用名称。调用该函数时,所有“T”实例将被提供的类型替换:

function genericFunc<T>(argument: T): T[] {
    var arrayOfT: T[] = [];
    arrayOfT.push(argument);
    return arrayOfT;
}

var arrayFromString = genericFunc<string>("beep");
console.log(arrayFromString[0]);
console.log(typeof arrayFromString[0])

var arrayFromNumber = genericFunc(45);
console.log(arrayFromNumber[0]);
console.log(typeof arrayFromNumber[0])

在上面的示例中,当我们第一次调用函数时,手动将类型设置为字符串。此步骤不是必需的,因为编译器知道哪个参数已被传递,并且可以在下次调用函数时推断出哪种类型是合适的。

即使它不是必需的,但是养成在编译器出错时始终提供类型的习惯是很好的,这可能会随着代码变得更复杂而发生。将泛型与接口相结合实际上可以保证生成的JavaScript完美无瑕。

第8部分)模块和命名空间

模块提供了另一种组织和合并代码的方法。如果有效使用,将代码拆分为可重用组件可以减少项目的文件数量,从而使维护更加容易。在TypeScript中,内部模块称为“名称空间”,而外部模块称为模块。

TypeScript具有导出和导入模块的特殊语法; 但是,语言不能直接处理文件之间的连线,所以我们需要一些第三方库来方便外部模块的使用。具体来说,我们请使用RequireJS为浏览器的应用程序或CommonJS的对Node.js的。

想象一下,您正在使用浏览器应用程序,并且您有两个.ts文件:一个用于导出功能; 另一个用于导入和调用该函数。它们看起来如下:

exporter.ts

var sayHi = function(): void {
    console.log("Hello!");
}

export = sayHi;
importer.ts

import sayHi = require('./exporter');
sayHi();

现在,要实现您的模块,首先需要下载require.js并将其粘贴到脚本标记上。然后,您必须设置一个额外的参数,让TypeScript知道您正在使用require.js,其操作如下:

tsc --module amd * .ts

学习如何在TypeScript中使用模块需要时间,但收益是巨大的。您可以在模块上的TypeScript文档中阅读有关它们的更多信息。

第9部分)第三方声明文件

当您需要使用最初用于常规JavaScript的库时,必须应用声明文件以使其与TypeScript兼容。具有扩展名的声明文件包含.d.ts有关库及其API的信息。您可以手动制作自己的声明文件,但您可以轻松找到.d.ts其他人已经创建的任何库的文件。

最好看的地方是DefinitelyTyped,这是一个庞大的公共存储库,拥有数千个库。当你在那里时,你也可以选择Typings,一个方便的Node.js模块来管理你的TypeScript定义。

TypeScript教程摘要

使用TypeScript几乎总是比直接编写JavaScript更好。即使您对JavaScript完全熟悉,花些时间学习TypeScript也会让您成为更快,更高效的Web开发人员。但是,TypeScript并不是唯一的“替代”JavaScript语言。其他受欢迎的选择包括CoffeeScript(如前所述),Babel、Elm。

image.png

从上面的Google趋势图中可以看出,其他选择也相当受欢迎。然而,TypeScript似乎越来越受欢迎,这使得它成为了解更多信息的一个很好的理由。

---------------END----------------

IT




全部评论: 0

    我有话说:

    【开源资讯】TypeScript 4.0.5 发布

    TypeScript 4.0.5 发布了,本次更新主要解决了 4.0 版本以来出现的一些问题,提高了整体的稳定性。详细更新如下:BUG 修复1、解决了对于版本 4.0,创建可释放程序包删除

    TypeScript教程

    TypeScript--用的人都说好👌

    TypeScript 4.2 发布

    TypeScript 4.2 已经发布。TypeScript是一种开源语言,它通过添加静态类型定义在 JavaScript(全球最常用的工具之一)的基础上构建。 主要更新内容 更智能的类型别名保护

    Angular 11.1.0 正式发布,支持 TypeScript 4.1

    Angular 是一个基于 TypeScript 的开源前端框架,由 Google 的 Angular 团队以及社区共同领导。Angular 是由 AngularJS 的同一个开发团队完全重写而成的

    Deno 1.8.1 发布,基于 V8 的 TypeScript 运行时

    Deno 1.8.1 现已发布,Deno 是 V8 上的安全 TypeScript 运行时。 此版本更新内容如下: fix(cli/ast):将 importsNotUsedAsValues 传递

    TypeScript Nodejs 项目结构

    新旧交替新事物代替旧事物无外乎旧事物太陈旧。JS动态软类型语言,便利的同时也带来了很多弊端,随着...

    TypeScript Nodejs 项目结构

    1. 新旧交替 新事物代替旧事物无外乎旧事物太陈旧。 JS动态软类型语言,便利的同时也带来了很多弊端,随着项目的增大,加上没有注释,你完全会懵逼。 可以看下网上汇总的错误信息,有多少个是类型错误引起的 图为rollbar统计的数千个项目中数...

    Spring Cloud(Greenwich版)-06-Spring Cloud集成Feign

    Spring Cloud系列教程第6节-Spring Cloud集成Feign

    【超全教程】SpringBoot 2.3.x 分层构建 Docker 镜像实践

    作者:超级小豆丁 http://www.mydlq.club/article/98/ 目录 什么是镜像分层 SpringBoot 2.3.x 新增对分层的支持 创建测试的 SpringBoot 应用 Maven 中引入相关依赖和插件 创建测试...

    微信小程序电商实战-购物车(上)

    好久没更新小程序电商实战的文章了,是因为最近一直做整体架构调整,一些准备工作也是比较耗费时间的。在这几天将会有新版的 小程序电商教程推出.......

    【收藏】18 个 Java8 日期处理的实践,太有用了!

    来源:https://juejin.im/post/5a795bad6fb9a0634f407ae5 Java 8 日期处理 Java 8 推出了全新的日期时间API,在教程中我们将通过一些简单的

    【开源资讯】Ant Design 4.0.1 发布,企业级 UI 设计语言

    Ant Design 是阿里开源的一套企业级的 UI 设计语言和 React 实现,使用 TypeScript 构建。

    前端框架 Angular 11.0.0 正式发布,不再支持 IE 9 、10

    前端框架 Angular 11.0.0 正式发布。 Angular 11.0.0 将 TypeScript 升级到 4.0, 对 TypeScript 3.9 不再支持。 放弃了对 IE 9 、10

    【轻阅读】基于 Java Spring cloud的开源在线教育系统调试实战

    转载自:https://www.toutiao.com/i6759167063090004483开篇之前分享

    React Suite 4.8.6 版本更新,React UI 库

    React Suite 是一套 React 组件库,为后台产品而生,支持 Typescript,支持 RTL,支持服务端渲染。 文档: https://rsuitejs.com

    Building an NPM TS package

      劳而不伐,有功而不德,厚之至也。(《周易·系辞上》) 原文链接--Step by step: Building and publishing an NPM Typescript

    Malagu v1.4.1 发布 - 支持 Serverless 优先的微服务框架

    Malagu 框架简介 Malagu 基于 TypeScript 的 Serverless First、组件化、平台无关的渐进式应用框架。 背景 当我们着手开发一个新项目的时候,单体和微服务架构该