如何在 TypeScript 中强制两种类型不兼容?

Sza*_*lyi 5 types typing typescript

我想在 TypeScript 中创建两种类型,它们都是数字:

export type GlobalPortIndex = number;
export type TypePortIndex = number;
Run Code Online (Sandbox Code Playgroud)

据我了解,TypeScript 会认为它们是相互兼容的,因为它们完全重叠。

但我希望它们不兼容,所以当我输入某些内容时GlobalPortIndex,如果我尝试TypePortIndex为其分配 a ,我会收到类型错误。这是为了确保我不会在代码中将它们混淆,例如我无法将其中一个传递给需要另一个的函数。

有什么 TypeScript 技巧可以实现这一点吗?

小智 0

我不是打字稿方面的专家,但是如果您实际上将值包装到类中然后静态检查类类型不是更好吗?

由于看起来您有一个对象类型为GlobalPortIndex,而另一个对象类型为TypePortIndex,因此它们有不同的用途。

或者也许将它们设置为enum语法可以解决这个问题?

enum FooKeys {
  FOO = 'foo',
  BAR = 'bar',
}

// probably all you need, but it's a type alias
type FooType = Record<FooKeys, string>;
Run Code Online (Sandbox Code Playgroud)

上面的代码引用自这篇文章:How to build a type from enum values in TypeScript?