快速上手

1.tsc

在命令行上,运行TypeScript编译器:

  1. tsc greeter.ts

转换Ts代码为Js代码

2.类型注解

TypeScript里的类型注解是一种轻量级的为函数变量添加约束的方式

  1. function greeter(person: string) {
  2. return "Hello, " + person;
  3. }
  4. let user = [0, 1, 2];
  5. document.body.innerHTML = greeter(user);

如果传入数组,会报错:
image.png

3.接口

允许我们在实现接口时候保证包含了接口要求的结构

  1. interface Person {
  2. firstName: string;
  3. lastName: string;
  4. }
  5. function greeter(person: Person) {
  6. return "Hello, " + person.firstName + " " + person.lastName;
  7. }
  8. let user = { firstName: "Jane", lastName: "User" };
  9. document.body.innerHTML = greeter(user);

不满足接口时候,编译会报错:
image.png

4.类

TypeScript支持JavaScript的新特性,比如支持基于类的面向对象编程

在构造函数的参数上使用public等同于创建了同名的成员变量。 class, interface中换行使用;

  1. class Strudent {
  2. hashKey: string;
  3. constructor (public name: string, public love: string) {
  4. this.hashKey = name + love + 'hash';
  5. }
  6. }
  7. interface Person {
  8. name: string;
  9. love: string;
  10. hashKey: string
  11. }
  12. function greeter(person: Person) {
  13. return "Hellp, " + person;
  14. }
  15. let user = new Strudent('czf', 'miku');
  16. document.body.innerHTML = greeter(user)

使用Gulp以及相关插件进行Ts编译

1.安装gulp

  1. npm install -g gulp-cli
  2. npm install --save-dev gulp gulp-typescript

2.建立tsconfig.json

  1. {
  2. "files": [
  3. "start/learn01.ts"
  4. ],
  5. "compilerOptions": {
  6. "noImplicitAny": true,//不允许隐式的any类型
  7. "target": "es5", //目标语言
  8. }
  9. }

3.建立gulpfile.js

  1. var gulp = require("gulp");
  2. var ts = require("gulp-typescript");
  3. var tsProject = ts.createProject("tsconfig.json");
  4. gulp.task("default", function () {
  5. return tsProject.src()
  6. .pipe(tsProject())
  7. .js.pipe(gulp.dest("dist"));
  8. });

此时在根目录下可以使用gulp进行编译

4.模块化代码

  1. export function sayHello(name: string) {
  2. return `Hello from ${name}`;
  3. }
  1. import { sayHello } from "./greet";
  2. console.log(sayHello("TypeScript"));

tsconfig.json

  1. {
  2. "files": [
  3. "start/learn01.ts",
  4. "start/person.ts",
  5. "start/student.ts",
  6. "start/common/printinfo.ts",
  7. ],
  8. "compilerOptions": {
  9. "noImplicitAny": true,//不允许隐式的any类型
  10. "target": "es5", //目标语言
  11. }
  12. }

Browserify

将所有文件捆绑为一个文件

安装相关包

  1. npm install --save-dev browserify tsify vinyl-source-stream

tsify是Browserify的一个插件,就像gulp-typescript一样,它能够访问TypeScript编译器
vinyl-source-stream会将Browserify的输出文件适配成gulp能够解析的格式

重写gulpfile.js

  1. var gulp = require("gulp")
  2. var ts = require("gulp-typescript")
  3. var browserify = require('browserify')
  4. var source = require('vinyl-source-stream')
  5. var tsify = require('tsify')
  6. var paths = {
  7. pages: ['start/*.html']
  8. }
  9. gulp.task('copy-html', function () {
  10. return gulp.src(paths.pages)
  11. .pipe(gulp.dest("dist"))
  12. })
  13. gulp.task('default', gulp.series('copy-html', function () {
  14. return browserify({
  15. basedir: '.',
  16. debug: true,
  17. entries: ['start/learn01.ts'],
  18. cache: {},
  19. packageCache: {}
  20. })
  21. .plugin(tsify)
  22. .bundle()
  23. .pipe(source('bundle.js'))
  24. .pipe(gulp.dest("dist"));
  25. }))

不要用Gulp3的方式指定依赖任务,你需要使用gulp.seriesgulp.parallel,因为gulp任务现在只有两个参数。 gulp.series:按照顺序执行
gulp.paralle:可以并行计算

  1. gulp.task('my-tasks', gulp.series('a', 'b', 'c', function() {
  2. // Do something after a, b, and c are finished.
  3. }));
  1. gulp.task('build', gulp.parallel('styles', 'scripts', 'images', function () {
  2. // Build the website.
  3. }));

Watchify,Babel和Uglify

Watchify

我们启动Watchify,让它在后台帮我们编译:

  1. npm install --save-dev watchify gulp-util
  1. var gulp = require("gulp")
  2. var watchify = require("watchify");
  3. var browserify = require('browserify')
  4. var source = require('vinyl-source-stream')
  5. var tsify = require('tsify')
  6. var gutil = require("gulp-util");
  7. var paths = {
  8. pages: ['start/*.html']
  9. }
  10. var watchedBrowserify = watchify(browserify({
  11. basedir: '.',
  12. debug: true,
  13. entries: ['start/learn01.ts'],
  14. cache: {},
  15. packageCache: {}
  16. }).plugin(tsify));
  17. gulp.task('copy-html', function () {
  18. return gulp.src(paths.pages)
  19. .pipe(gulp.dest("dist"))
  20. })
  21. function bundle() {
  22. return watchedBrowserify
  23. .bundle()
  24. .pipe(source('bundle.js'))
  25. .pipe(gulp.dest("dist"));
  26. }
  27. gulp.task('default', gulp.series('copy-html', bundle))
  28. watchedBrowserify.on("update", bundle);
  29. watchedBrowserify.on("log", gutil.log);

Uglify

首先安装Uglify。 因为Uglify是用于混淆你的代码,所以我们还要安装vinyl-buffer和gulp-sourcemaps来支持sourcemaps。

  1. npm install --save-dev gulp-uglify vinyl-buffer gulp-sourcemaps
  1. var gulp = require("gulp")
  2. var watchify = require("watchify");
  3. var browserify = require('browserify')
  4. var source = require('vinyl-source-stream')
  5. var tsify = require('tsify')
  6. var gutil = require("gulp-util");
  7. var uglify = require('gulp-uglify');
  8. var buffer = require('vinyl-buffer');
  9. var sourcemaps = require('gulp-sourcemaps');
  10. var paths = {
  11. pages: ['start/*.html']
  12. }
  13. var watchedBrowserify = watchify(browserify({
  14. basedir: '.',
  15. debug: true,
  16. entries: ['start/learn01.ts'],
  17. cache: {},
  18. packageCache: {}
  19. }).plugin(tsify));
  20. gulp.task('copy-html', function () {
  21. return gulp.src(paths.pages)
  22. .pipe(gulp.dest("dist"))
  23. })
  24. function bundle() {
  25. return watchedBrowserify
  26. .bundle()
  27. .pipe(source('bundle.js'))
  28. .pipe(buffer())
  29. .pipe(sourcemaps.init({loadMaps: true}))
  30. .pipe(uglify())
  31. .pipe(sourcemaps.write('./'))
  32. .pipe(gulp.dest("dist"));
  33. }
  34. gulp.task('default', gulp.series('copy-html', bundle))
  35. watchedBrowserify.on("update", bundle);
  36. watchedBrowserify.on("log", gutil.log);

Babel

首先安装Babelify和ES2015的Babel预置程序。 和Uglify一样,Babelify也会混淆代码,因此我们也需要vinyl-buffer和gulp-sourcemaps。 默认情况下Babelify只会处理扩展名为 .js,.es,.es6和.jsx的文件,因此我们需要添加.ts扩展名到Babelify选项。

  1. npm install --save-dev babelify babel-core babel-preset-es2015 vinyl-buffer gulp-sourcemaps