如何在打字稿中扩展基本类型?

时间:2019-02-17 15:27:05

标签: typescript

我有一个实例,其中两个属性都必须具有“数字”,并且在发生事故时我使用了一个而不是另一个。没什么可抱怨的,调试它们花了一段时间。

我想知道是否有可能扩展基本类型,以确保例如在尝试将Age类型的值分配给Score类型的变量(都是数字累的)?

编辑:很抱歉,没有代码示例的原始问题。 Nurbol Alpysbayev正确解释了我的问题,他的代码示例确实代表了我想要看到的事情:

type Score = number;
type Age = number;

let score: Score = 999;
let age: Age = 45;

score = age; // I want to have this line to throw an error

1 个答案:

答案 0 :(得分:3)

问题的质量可能会更好,但是我想我理解。

我相信您做了这样的事情:

type Score = number
type Age = number

let score: Score = 999
let age: Age = 45

score = age // no errors (and it confused you)

现在,您的问题的答案是: AgeScore都是相同类型的类型别名 ,即number。名称只是为了方便起见,这就是为什么它们首先被称为 aliases 的原因。

因此,您将类型别名用于错误的任务。如果需要区分类型,则必须使用如下接口:

interface Score {type: 'score', value: number}
interface Age {type: 'age', value: number}

let score: Score = {type: 'score', value: 999}
let age: Age = {type: 'age', value: 45}

score = age // error

但是您应该知道,对于代表得分和年龄的数据,您应该只保留类型number,而不会对其进行过度设计。