mileOfSunshine / blog

2 stars 0 forks source link

TypeScript #43

Open mileOfSunshine opened 1 year ago

mileOfSunshine commented 5 months ago

接口

接口定义一批类所需要遵守的规则。接口中不能有方法体,只需要有方法定义。

接口的定义不要理解为是在定义一个对象,而是要理解为{}括号包裹的代码块,里面是一条条声明语句,只不过声明的不是变量的值而是类型。声明用冒号指定类型,每条声明之前可换行、分号、逗号分隔。

接口声明由关键字interface开头,后面紧跟着接口名,接口名一般以大写字母开头。

接口支持的属性有:

- 索引类型(签名)
```ts
interface Person {
    [id: number]: string;
}
interface Person {
    name: string;
}

interface Student extends Person {
    age: number;
}
mileOfSunshine commented 5 months ago

类型别名

类型别名用来给一个类型起个新名字。使用 type 关键字来定义类型别名。

let obj: Size = { width: 100, height: 200 };

- 使用类型别名时可以在**属性**中引用自己
```ts
type Child<T> = {
    rank: T,
    child?: Child<T>
}

let obj: Child<number> = {
    rank: 1,
    child: {
        rank: 2,
        child: {
            rank: 3
        }
    }
}

let dir: Direction = 'left';

mileOfSunshine commented 5 months ago

接口 & 类型别名

使用场景:

区分:

相同点:允许扩展

// interface extends interface
interface Name { 
  name: string; 
}
interface User extends Name { 
  age: number; 
}
// type extends type
type Name { 
  name: string; 
}
type User  = Name & { age: number }
// interface extends type
type Name { 
  name: string; 
}
interface User extends Name {
  age: number;
}
// type extends interface
interface Name { 
  name: string; 
}

type User = Name & { age: number }