gpt4 book ai didi

typescript - 有没有办法在 TypeScript 中创建扩展原始类型的标称类型?

转载 作者:搜寻专家 更新时间:2023-10-30 20:31:41 24 4
gpt4 key购买 nike

假设我正在跟踪两种类型的数字,如 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 编译时数字子类吗?

最佳答案

您可以使用辅助类型来近似 Typescript 中的不透明/标称类型。有关详细信息,请参阅此答案:

// Helper for generating Opaque types.
type Opaque<T, K> = T & { __opaque__: K };

// 2 opaque types created with the helper
type Int = Opaque<number, 'Int'>;
type ID = Opaque<number, 'ID'>;

// works
const x: Int = 1 as Int;
const y: ID = 5 as ID;
const z = x + y;

// doesn't work
const a: Int = 1;
const b: Int = x;

// also works so beware
const f: Int = 1.15 as Int;

这里有一个更详细的答案: https://stackoverflow.com/a/50521248/20489

还有一篇关于执行此操作的不同方法的好文章: https://michalzalecki.com/nominal-typing-in-typescript/

关于typescript - 有没有办法在 TypeScript 中创建扩展原始类型的标称类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26810574/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com