枚举类型的扩展

例如我们有一个枚举类型,但是我们临时想扩展一个怎么办呢?

type Fruit = 'Apple' | 'Banana';

const human: {name: string, age: number,  favouriteFruit: Fruit} = {
    name: '张三',
    age: 12,
    favouriteFruit: 'Orange' // Ts会报错,因为没有这个类型
}

我们会这样处理

type Fruit = 'Apple' | 'Banana';

const human: {name: string, age: number, favouriteFruit: Fruit | 'Orange' = {
    name: '张三',
    age: 12,
    favouriteFruit: 'Orange' // Ts就不会报错了
}

 

如果type想作为一个Object的key呢?

type Fruit = 'Apple' | 'Banana';

const human: {
    name: string, 
    age: number,  
    needFruit: {
        [key in Fruit]?: number
    }
} = {
    name: '张三',
    age: 12,
    needFruit: {
        Apple: 50,
        Orange: 100, // Ts会报错,因为没有Organge这个类型
    }
}

我们会这么处理

type Fruit = 'Apple' | 'Banana';

const human: {
    name: string, 
    age: number,  
    needFruit: {
        [key in Fruit | 'Orange']?: number
    }
} = {
    name: '张三',
    age: 12,
    needFruit: {
        Apple: 50,
        Orange: 100, // Ts就不会报错了
    }
}

 

复合类型的扩展

type Human = {
    name: string,
    age: number
}

const human: Human = {
    name: '张三',
    age: 22,
    gender: 'Male' // Ts报错,没有gender这个字段
}

这个时候,我们用到interfance

type Human = {
    name: string,
    age: number
}

interface SuperHuman extends Human {
    gender: string
}

const human: SuperHuman = {
    name: '张三',
    age: 22,
    gender: 'Male' // Ts就不报错了
}

 

相关文章:

  • 2021-06-26
  • 2021-08-30
  • 2022-01-28
  • 2021-07-11
  • 2021-06-29
  • 2021-11-29
  • 2022-01-07
  • 2022-01-08
猜你喜欢
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-10-09
  • 2022-12-23
  • 2021-12-09
  • 2022-01-02
相关资源
相似解决方案