.Net Corejs css html

浅谈 interface 和 type

2022-07-24  本文已影响0人  sweetBoy_9126

type 类型别名

  1. 给类型起一个新名字,当声明非对象类型时适用
type MyNumber = number
type StringOrNumber = string | number
type Text = string | string[]
type Point = [number, number]
type Callback = (data: string) => void
  1. 支持传入泛型
    常用的工具方法都是通过 type 实现的
type Partial<T> = {
  [P in keyof T]?: T[P]
}

interface 接口

只能用于定义对象类型
可以定义对象类型上的属性和方法

相同点

  1. 都可以用来描述对象或函数
  2. 都支持扩展
    type 通过 & 交叉运算符来扩展,interface 通过 extends 关键字来扩展

区别

  1. type 可以为基本类型、联合类型或元祖类型定义别名,而接口不行

  2. 同名接口会自动合并,而类型别名不会
    1). 不同属性之间直接合并

interface User {
  name: string
}
interface User {
  id: number
}
合并成
interface User {
  name: string
  id: number
}

2). 相同属性不同类型,报错

interface User {
    name: string
 }
 interface User {
    // 报错 name 必须是 stirng 类型
     name: number
 }

3). type 直接报错

type User = {
  name: string
}
// 报错:标识符“User" 重复
type User = {
  id: number
}
  1. interface 会创建新的类型名,type 只是创建类型别名,并没有新创建类型。

使用场景

上一篇下一篇

猜你喜欢

热点阅读