说我有两种类型的编号是我喜欢的跟踪latitude和longitude.我想用基本number原语表示这些变量,但不允许在typescript中将longitudea 赋值给latitude变量.
有没有办法对number基元进行子类化,以便打字稿将此作业检测为非法?在某种程度上强制名义输入,以便此代码失败?
var longitude : LongitudeNumber = new LongitudeNumber();
var latitude : LatitudeNumber;
latitude = longitude; // <-- type failure
Run Code Online (Sandbox Code Playgroud)
"如何在打字稿中扩展原始类型?"的答案 似乎它会让我朝着正确的方向前进,但我不知道如何扩展该解决方案以为不同类型的数字创建不同的名义子类型.
我必须包装原语吗?如果是这样,我可以使它表现得像普通数字一样无缝,还是我必须引用一个子成员?我可以以某种方式创建一个打字稿编译时数字子类吗?
我只是好奇者,有没有一种方法可以区分原子类型以提高TypeScript中的类型安全性?
换句话说,下面有一种方法可以复制行为:
export type Kilos<T> = T & { discriminator: Kilos<T> }; // or something else
export type Pounds<T> = T & { discriminator: Pounds<T> }; // or something else
export interface MetricWeight {
value: Kilos<number>
}
export interface ImperialWeight {
value: Pounds<number>
}
const wm: MetricWeight = { value: 0 as Kilos<number> }
const wi: ImperialWeight = { value: 0 as Pounds<number> }
wm.value = wi.value; // Should give compiler error
wi.value = wi.value * 2; // Shouldn't error, …Run Code Online (Sandbox Code Playgroud) typescript ×2