# Typescript基本知识

# 如何理解TypeScript

TypeScript是JavaScript的超集,主要提供了类型系统、对ES6的支持。通过TypeScript静态类型检查,可以在开发时尽早发现语法错误或传参错误,也增强代码的阅读性、可维护性

# type与interface

相同点:

  • 都可以描述一个对象或函数的类型
  • 都可以 互相继承(继承的语法不同)

不同点:

  • type一般用来 声明类型别名、联合类型
  • type 语句中,可以通过typeof获取实例的类型,并赋值
  • interface可以 将同一类型的声明进行合并

# 示例

【相同点】 都可以描述一个对象或函数的类型

type User = {
    name: string;
    age: number;
}
type SetUser = (name: string, age: number) => void;
1
2
3
4
5
interface User {
    name: string;
    age: number;
}
interface SetUser {
    (name: string, age: number): void;
}
1
2
3
4
5
6
7

【相同点】 都可以 互相继承(继承的语法不同)

interface Name {
    name: string;
}
interface User extends Name {
    age: number;
}
1
2
3
4
5
6
type Name = {
    name: string;
}
type User = Name & { age: number };
1
2
3
4
type Name = {
    name: string;
}
interface User extends Name {
    age: number;
}
1
2
3
4
5
6
interface Name {
    name: string;
}
type User = Name & { age: number };
1
2
3
4

【不同点】 type一般用来 声明类型别名、联合类型

// 声明类型别名
type Name = string;

// 联合类型
interface Dog {
    wong();
}
interface Cat {
    miao();
}
type Pet = Dog | Cat;
1
2
3
4
5
6
7
8
9
10
11

【不同点】type 语句中,可以通过typeof获取实例的类型,并赋值:

interface Person {
    name: string;
    age: number;
}

const heshiyu: Person = { name: 'heshiyu', age: 24 };

// 声明一个类型
// 等价于typeof Man = Person
type Man = typeof heshiyu;
1
2
3
4
5
6
7
8
9
10
  • interface可以 将同一类型的声明进行合并
interface User {
    name: string;
}
interface User {
    age: number;
}

/*
 * 最后,User接口会变为:
 * interface User {
 *     name: string;
 *     age: number;
 * }
 */
1
2
3
4
5
6
7
8
9
10
11
12
13
14
更新时间: 5/6/2020, 9:44:05 PM