TypeScript基础概念介绍---总结记录

99 阅读2分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第12天,点击查看活动详情

TypeScript

介绍TypeScript

TypeScript是一个开源的、渐进式包含类型的JavaScript超集。它的主要功能是为JavaScript变量提供类型支持,从而更容易的重构代码和寻找bug。最后,Typescript会被编译成简单的JavaScript代码。

全局安装TypeScript

npm install -g typescript

示例,创建一个以.ts为扩展名的文件,比如hello.ts

let a = "hello world";
a = 20

使用tsc命令来编译它

tsc hello.ts

在终端输出信息中,可以看到下面的警告

hello.ts:2:1 - error TS2322: Type 'number' is not assignable to type 'string'.

这表示number类型不能赋值给字符串类型,但是检查文件目录,hello.ts被编译后会自动生成一个hello.js文件。

var a = "hello world";
a = 123;

尽管TypeScript在编译时进行了类型和错误检测,但是并不会阻止编译器生成JavaScript代码,开发者可以根据这些警告提示信息修改自己的代码,写出较少错误和bug的JavaScript代码。

类型推断

TypeScript有一个类型推断机制,也就是说TypeScript会根据为变量赋的值自动给该变量设置一个类型。

let age = 20; //number
let flag = true; //blean
let name = "JiaJi"; //string

当变量只是定义没有赋值时,它的类型会被自动设置为any,意思是可以接受任何值,但推荐为其设置一个类型。

示例:

let age: number;
let name: string;

接口

在TypeScript中有两种接口的概念。

第一种接口的概念是把接口看作一个实际的东西,它是对一个对象必须包含的属性和方法的描述。

interface Person{
    name: string;
    age: number
}
function logName(person: Person){ //传递的参数必须是Person
    console.log(person.name);
}
const john = {name: "john", age: 21};
const mary = {name: "mary", age: 21, phone: "12442432430"};
logName(john);
logName(mary);

上面的代码不会出现任何编译错误,变量mary包含了Person接口定义的属性,那么它就是一个Person。

第二种TypeScript接口的概念和面向对象编程相关。接口就是一份合约,在这份合约里,可以定义实现这份合约的类或接口的行为。

interface Comparable{
    compareTo(b): number;
}
class MyObject implements Comparable{
    age: number;
    compareTo(b): number{
        if(this.age === b.age){
            return 0;
        }
        return this.age > b.age ? 1  : -1;
    }
}

泛型

泛型也是typescript强大的特性。修改一下Comparable接口,以定义compareTo方法接收的参数是什么类型。

interface Comparable<T>{
    compareTo(b:T):number;
}

用尖括号向Comparable接口动态地传入T类型,可以指定compareTo函数的参数类型。

class MyObject implements Comparable<MyObject>{
    age: number;
    compareTo(b: MyObject): number{
        if(this.age === b.age){
            return 0;
        }
        return this.age > b.age ? 1  : -1;
    }
}

参考

《学习JavaScript数据结构与算法(第3版)》