假设我有两种类型的数字,比如latitudelongitude.我想用基本number原语来表示这些变量,但不允许在typescript中将longitude赋值给latitude变量.

有没有办法对number原语进行子分类,以便typescript将此赋值检测为非法?以某种方式强制进行名义上的键入,从而使该代码失败?

var longitude : LongitudeNumber = new LongitudeNumber();
var latitude : LatitudeNumber;
latitude = longitude; // <-- type failure

"How to extend a primitive type in typescript?"的答案似乎将我带向正确的方向,但我不确定如何扩展该解决方案,为不同的kinds个数字创建不同的名义子类型.

我必须包装原始文件吗?如果是这样的话,我可以让它像正常数字一样无缝地工作,还是必须引用子成员?我可以创建一个typescript编译时数字子类吗?

推荐答案

没有办法做到这一点.

在GitHub网站上追踪这一点的建议是Units of Measure.

在future 的版本中,您可以使用type来定义原语的替代名称,但这些名称不会有任何与之相关的判断:

type lat = number;
type lon = number;
var x: lat = 43;
var y: lon = 48;
y = 'hello'; // error
x = y; // No error

Typescript相关问答推荐

为什么AB和CD这两种类型在TypScript中可以相互分配?

对可变位置的父对象的TypScript空判断

端点之间的TEK查询缓存

TypScript在对象上强制执行值类型时推断对象文字类型?

如何从TypScript中的接口中正确获取特定键类型的所有属性?

用泛型类型覆盖父类函数导致类型y中的Property x不能赋给基类型Parent中的相同属性."'''''' "

有没有可能使用redux工具包的中间件同时监听状态的变化和操作

TypeScript类型不匹配:在返回类型中处理已经声明的Promise Wrapper

我应该使用什么类型的React表单onsubmit事件?

React router 6.22.3不只是在生产模式下显示,为什么?

类型脚本泛型最初推断然后设置

如何在编译时为不带常量的参数引发错误

尽管对象的类型已声明,但未解析的变量<;变量

基元类型按引用传递的解决方法

抽象类对派生类强制不同的构造函数签名

推断集合访问器类型

基于闭包类型缩小泛型类型脚本函数的范围

Route.ts文件中未导出HTTP方法

定义一个只允许来自另一个类型的特定字符串文字的类型的最佳方式

带有过滤键的 Typescript 映射类型