Giter VIP home page Giter VIP logo

typescript-playground's Introduction

TypeScript Playground

TypeScript简介

  • 静态代码分析。为了消除潜在的运行时问题,ts被设计成强类型语言,在编译阶段可以进行静态类型检查。ts还有一个语言服务层,用来给开发者提供一些工具。例如,生成一些信息给 IDE 或者编辑器提供更好的特性支持,IntelliSense或者自动化重构。语言服务支持一系列典型的编辑器操作比如语句自动补全,函数签名提示,代码格式化和突出高亮,着色等。基本的重构功能比如重命名,调试接口辅助功能比如验证断点,还有 TypeScript 特有的功能比如支持增量编译(在命令行上使用--watch)。语言服务是被设计用来有效的处理在一个长期存在的编译上下文中文件随着时间改变的情况;在这样的情况下,语言服务提供了与其它编译器接口不同的角度来处理程序和源文件。

  • js高度兼容,tsjs的超集,任何有效的js代码对ts同样有效。

  • ts可以更好的组织代码结构。ts加入了了类(class),接口(interface)和模块系统(module),这些特性可以帮助我们更好的组织代码。在团队开发中,可以减少潜在的代码集成问题,并且,还可以增强代码的可维护性,可伸缩性。

  • ts明确了代码设计阶段和运行阶段,我们在代码设计阶段用ts编写代码,在运行阶段,用ts编译而成的js的代码。ts增加的一些新特性,只是用在代码设计阶段。例如,我们可以在ts代码中声明(declare)接口(interface),但是js是不支持接口(interface)的,ts编译器(compiler)在将ts代码编译成js的过程中,也不会在js代码中加入模拟这些特性的代码。

  • ts编译器(compiler)提供代码转换(转换ts特性代码为js实现),类型擦除(移除静态类型注解),类型擦除不仅仅移除类型注解,还有ts独有的特性,例如接口(interface)。经过ts编译出来的js代码,在浏览器环境中有很好的兼容性,通过编译器配置设定,可以设定生成的目标js代码为ecmascript 3, ecmascript 5或者ecmascript 6

  • 遵循ecmascript标准规范,最新版的ts中加入的特性都是基于ecmascript标准规范。这表示,将来,很多ts文件的代码将自动变为有效的js代码。

  • 成为跨平台开发工具,可以运行在很多主流系统中。

  • TypeScript 作为 JavaScript 的超集,在开发过程中不可避免要引用其他第三方的 JavaScript 的库。虽然通过直接引用可以调用库的类和方法,但是却无法使用 TypeScript 诸如类型检查等特性功能。为了解决这个问题,需要将这些库里的函数和方法体去掉后只保留导出类型声明,而产生了一个描述 JavaScript 库和模块信息的声明文件。通过引用这个声明文件,就可以借用 TypeScript 的各种特性来使用库文件了。

说明

  • npm run test:w,监视文件变动(变动是指git没有 commit 的文件)并重新运行单元测试
  • tsc使用tsconfig.json作为编译器配置,tsconfig.json还可以提供项目的全局配置。例如,我们可以在项目根目录下运行tsc,编译器将会递归的查找项目的根目录和子目录,并编译所有ts文件。
  • 使用tsc --init快速生成tsconfig.json文件。
  • tsc允许项目中有多个tsconfig.json文件,这样就可以实现不同目录下使用该目录下的tsconfig.json编译器配置文件进行编译。

关于TypeScript的第三方库的描述文件@types/xxx

TypeScript最早使用tsd作为管理TypeScript应用中描述文件的工具,见repo, 但是由于本身有缺陷和性能问题,被废弃。 见link。 逐渐被typings取代。typescript 2.0之前(不包括 2.0),使用Typings工具来对TypeScript应用中的描述文件进行管理。

TypeScript 2.0开始,可以使用npm, yarn这些包管理工具直接安装第三方描述文件,详见link

FAQ

  • 使用git clean -f -n查看可以被删除的untracked files
  • 使用git clean -f, 删除untracked files

typescript-playground's People

Contributors

dependabot[bot] avatar mrdulin avatar

Stargazers

 avatar

Watchers

 avatar  avatar  avatar

typescript-playground's Issues

类静态部分与实例部分的区别

当你操作类和接口的时候,你要知道类是具有两个类型的:静态部分的类型和实例的类型。
你会注意到,当你用构造器签名去定义一个接口并试图定义一个类去实现这个接口时会得到一个错误:
这里因为当一个类实现了一个接口时,只对其实例部分进行类型检查。
constructor存在于类的静态部分,所以不在检查的范围内。

interface IClockConstructor {
  new (hour: number, minute: number): void;
}

class Clock implements IClockConstructor {
  public currentTime: Date = new Date();
  constructor(public h: number, public m: number) {}
}

image

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.