我有一个实例,其中两个属性都必须具有“数字”,并且在发生事故时我使用了一个而不是另一个。没什么可抱怨的,调试它们花了一段时间。
我想知道是否有可能扩展基本类型,以确保例如在尝试将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
答案 0 :(得分:3)
问题的质量可能会更好,但是我想我理解。
我相信您做了这样的事情:
type Score = number
type Age = number
let score: Score = 999
let age: Age = 45
score = age // no errors (and it confused you)
现在,您的问题的答案是:
Age
和Score
都是相同类型的类型别名 ,即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
,而不会对其进行过度设计。