gpt4 book ai didi

typescript - 我可以在 TypeScript 中声明自定义数字类型吗?

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

我能以某种方式声明自定义数字类型吗?例如。我想要一个 UnixMsDate 和一个 UnixSDate 类型,我希望 TS 可以帮助我始终区分这两者并消除歧义,这意味着我永远不要不小心把它们混在一起。同时能够明确地在它们之间(以及到/从数字)进行转换。

我试过 type UnixMsDate = number 并且它编译了,但它似乎只是 number 的一个可互换的别名。

我正在寻找的东西是否可能以某种方式实现?

最佳答案

使用枚举

enum UnixMsDate { }
enum UnixSDate { }

let date1: UnixMsDate;
let date2: UnixSDate;

date1 = date2; // Type 'UnixSDate' is not assignable to type 'UnixMsDate'.

function foo(x: UnixMsDate) { }
foo(date2); // Argument of type 'UnixSDate' is not assignable to type 'UnixMsDate'.

// All the below work.
date1 = +new Date();
date1 += 22;
console.log(date1 + date2);
date1 = 3.14159;
x1 = +x2;
x1 = Number(x2);
foo(+x2);

使用交叉路口类型的替代方法

您可以使用交集类型完成同样的事情:

type A = number & { _A: void; };
type B = number & { _B: void; };

这几乎是一样的,除了你需要在分配时进行转换:

let a: A = <A>222;

它仍然不阻止将两种类型的数字相加。 Here is more information关于这个黑客。

关于typescript - 我可以在 TypeScript 中声明自定义数字类型吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43831683/

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