安装ts及编译案例解析

194 阅读3分钟

安装TypeScript

有两种主要的方式来获取TypeScript工具:

  • 通过npm(Node.js包管理器)
  • 安装Visual Studio的TypeScript插件

Visual Studio 2017和Visual Studio 2015 Update 3默认包含了TypeScript。

如果Visual Studio还没有安装TypeScript,你可以下载它。

针对使用npm的用户:

npm install -g typescript

构建你的第一个 TypeScript文件

在编辑器,将下面的代码输入到greeter.ts文件里:

function greeter(person) {
    return "Hello, " + person;
}
let user = "Jane User";
document.body.innerHTML = greeter(user);

编译代码

我们使用了.ts扩展名,但是这段代码仅仅是JavaScript而已。

可直接从现有的JavaScript应用里复制/粘贴这段代码。

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

tsc greeter.ts

输出结果为一个greeter.js文件,它包含了和输入文件中相同的JavsScript代码。 一切准备就绪,可以运行这个使用TypeScript写的JavaScript应用了。

案例:greeter.Ts

class Student {
    fullName: string;
    constructor(public firstName, public middleInitial, public lastName) {
        this.fullName = firstName + " " + middleInitial + " " + lastName;
    }
}

interface Person {
    firstName: string;
    lastName: string;
    // 这里只定义了firstName 和 lastName,所以从接口中只能获取这2个属性,其他属性获取不到
}

function greeter(person : Person) {
    return "Hello, " + person.firstName + " " + person.lastName;
}

let user = new Student("Jane", "M.", "User");
// document.body.innerHTML = greeter(user);

console.log('user: ', user);
// Student {
    // firstName: 'Jane',
    // middleInitial: 'M.',
    // lastName: 'User',
    // fullName: 'Jane M. User'
// }

console.log('greeter(user): ', greeter(user)); 
// Hello, Jane User

运行 tsc greeter.ts文件,生成greeter.js文件

greeter.js

var Student = /** @class */ (function () {
    function Student(firstName, middleInitial, lastName) {
        this.firstName = firstName;
        this.middleInitial = middleInitial;
        this.lastName = lastName;
        this.fullName = firstName + " " + middleInitial + " " + lastName;
    }
    return Student;
}());
function greeter(person) {
    return "Hello, " + person.firstName + "" + person.lastName;
}

var user = new Student("Jane", "M.", "User");

console.log('user: ', user);

// Student {
    // firstName: 'Jane',
    // middleInitial: 'M.',
    // lastName: 'User',
    // fullName: 'Jane M. User'
// }

console.log('greeter(user): ', greeter(user)); // Hello, Jane User

// tsc greeter.ts

运行node greeter.js

image.png

案例2:定义ts,然后在vue中使用

image.png

Vue文件中: image.png

image.png

对比和js的写法:

image.png

TypeScript 实际上是 JavaScript 的超集,编译后的 TypeScript 就是去掉类型检查和其他限定的 JavaScript,而在使用 TypeScript 编辑代码时,编译器和 IDE 的编辑器会检查这些限定。

TypeScript 如何运作

  1. 写下 TypeScript 代码
  2. TypeScript 将 TypeScript 代码编译为 JavaScript 代码
  3. 将 JavaScript 代码送入各种运行时环境进行解释运行

为什么要使用ts

js存在的问题

JavaScript的动态类型特性减少了代码量,提高了开发效率和基于Web浏览器的应用场景中客户端与服务端数据传输的效率。然而,现在的JavaScript已经不再只是运用在Web浏览器场景中。动态类型特点带来了一系列问题:

  • 'undefined' is not a function.
  • TypeError: Cannot read property 'foobar' of undefined
  • 实际返回值和预期返回值不同
  • 大量的assert类型断言
  • 将一个字符串类型与整型相加,但是JavaScript返回了一个字符串类型
  • ...

JavaScript 的解释型和动态类型特性会导致意料之外的结果,甚至导致严重逻辑错误和程序崩溃。不健全的 JavaScript 代码反而会降低程序员的开发效率,这违反了 JavaScript 的设计初衷。

新的 EcmaScript 标准提供了一些更有效的类型判断方式,但这还远远不够,JavaScript难以胜任大型项目的开发。JavaScript 急需一些编译型、静态类型语言的特性来弥补在这些运行环境中的不足,提高代码可读性,并减少运行时错误。

TypeScript 起源

2012年,Microsoft 首次发布公开版本的 TypeScript 。由于TypeScript 是JavaScript 的超集,任何原生的JavaScript 代码都可以直接通过编译器检查并运行。 TypeScript 的静态类型和编译大大降低了发生运行时错误的可能性,同时作为超集,TypeScript 依旧保留了JavaScript 的灵活性,一举两得。

TypeScript 同样支持 ES6 标准

通过使用 TypeScript 编译器,可以将TS代码和一些原生 JS 库内容混用,像使用原生 JS 代码引用这些库内容一样的在TS中使用他们。 image.png