一道常见的Typescript面试题

256 阅读1分钟

本文介绍一道常见的面试题:typescript中 typeinterface 的异同点,以及什么时候该使用它们。

相同的用法

定义object类型

interface User {
  name: string
  age: number
}

type User = {
  name: string
  age: number
}

定义function类型

interface Fn {
  (name: string) => void
}

type Fn = (name: string) => void

继承(拓展)

// interface

interface Name {
  name: string
}

interface User extends Name {
  age: number
}


// type

type Name = {
  name: string
}

type User = Name & {
  age: number
}

interface 继承 type

type Name = {
  name: string
}

interface User extends Name {
  age: number
}

type 继承 interface

interface Name {
  name: string
}

type User = Name & {
  age: number
}

不同点

实现类型:

type 可以定义基本类型,元组, 联合类型。interface 不行

// 基本类型
type Name = string

// 联合类型
interface ZhangSan {
  name: string
}

interface LiSi {
  age: number
}

type People = ZhangSan | LiSi

// 元组
type Perple = [ZhangSan, LiSi]

声明合并:

type 不能重复定义相同的类型名,interface 定义相同的类型名会进行声明合并。

interface:

// interface

interface User {
  name: string
}

interface User {
  age: number
}

// 属性会被合并到User中
const user: User = {
  name: '',
  age: 18
}

type:

不能重复声明

总结

相同点

  1. 都能定义object类型和function类型
  2. 都能被继承,interface使用extends,type使用&

区别总结:

  1. 实现类型: type 可以定义基本类型,元组, 联合类型。interface 不行
  2. 声明合并: type 不能重复定义相同的类型名,interface 定义相同的类型名会进行声明合并

什么时候使用type

  1. 定义基础类型
  2. 定义函数类型
  3. 定义联合类型
  4. 定义元组类型
  5. 定义映射类型

什么时候使用interface

  1. 需要声明合并时
  2. 定义object类型时