当前位置: 首页 > 知识库问答 >
问题:

值类/在TypeScript中严格键入[重复]

刘选
2023-03-14

是否可以像在Scala中一样在TypeScript中为严格类型定义值类?

TypeScript"编译器"似乎忽略了类型别名:

export type UserId = number;
export type CarId  = number;

const userId: UserId = 1

const findUser = (userId: UserId) => { ... }
findUser(userId) // OK

const findCar  = (carId: CarId) => { ... }
findCar(userId) // OK too! I would like to prevent such behavior

在Scala中,我们可以使用值类(除了严格的类型之外,它还提供了更多的优势):

case class UserId(value: Int) extends AnyVal

共有1个答案

步弘和
2023-03-14

不,这在TypeScript中是不可能的。TS使用结构子类型(也称为duck类型),这意味着任何看起来足够像给定类型的东西都将被接受为该类型。

在您的例子中,UserID和CarID都是以数字的形式结构化的,因此可以互换使用。

 类似资料:
  • 我在TypeScript中有一个接口或抽象类,我有一大堆实现/扩展接口/类的类,我想用所有子类的构造函数生成一个数组,但我想把数组类型为接口/超类。这可能吗? 可以将键入以外的任何内容吗?我想尽可能地说得具体些。我知道在ActionScript中您至少可以执行,在Haxe中您可以执行,但是在TypeScript中您甚至不能作为afaik键入。

  • React/Typescript中对象的类型是什么,例如: 如果我需要将它定义为一个对象,我应该输入什么类型,而不是

  • 所以下面的代码是在Angular 4中,我不知道为什么它没有按预期的方式工作。 下面是我的处理程序的一个片段: 超文本标记语言元素: 代码给了我错误: 属性值在类型Event塔吉特上不存在。 但是从< code>console.log中可以看出,该值确实存在于< code>event.target中。

  • 现在JSCS项目与ESLint合并,JSCS linter被弃用,我仍然很难找到替换某些规则的方法。具体来说,JSCS有一条规则,它的作用是:要求您在之后添加新行。我搜索了ESLint规则,但找不到等效规则。是否有一个插件可以为ESLint添加类似的规则?

  • 在TypeScript中,< code>class关键字引入了值和类型: 有没有一种方法可以使函数返回既是类型又是值的东西? 问这个问题的另一种方法是:有没有办法在下面声明的类型,以便类型检查? 看到这个打字游戏了吗

  • 问题内容: 我正在描述一个React库,该库通过一个名为的属性采用一个组件或HTML标签名称。给定属性后,它将根据该组件/标签名称创建一个元素,并传递所有其他给定属性。 这里有些例子: 我知道语义UI在扩充方面做了类似的事情。我将如何在TypeScript中键入此内容? 问题答案: 我将在此处给出最基本要求的示例。您可以尝试将其概括为功能更复杂的产品。 首先,这是我们的魔力! 注意两件事: 一种叫