我正在使用Type Flavoring在我的打字稿应用程序中将不同类型的键分开。但是,我注意到这有一个奇怪的副作用,即允许以下形式的对象
{[key: SomeFlavoredString]: ObjectA}
Run Code Online (Sandbox Code Playgroud)
传递给采用以下形式参数的函数
{[key: SomeOtherFlavoredString]: ObjectB}
Run Code Online (Sandbox Code Playgroud)
不抱怨,这可能会导致一些令人惊讶的错误。这里有一个游乐场
我认为发生的事情是它假设由于键类型是不相交的,所以额外的键是不相关的,因此这些不兼容键的值是不兼容的值并不重要,所以它相当于从打字稿编译器的视角。
有什么方法可以禁用此功能或坚持我的参数在任何键上都不能有任何不兼容的值?这似乎不是理想的行为
我见过许多不同的方法来在 Typescript 中执行名义类型,但它们似乎都在某些方面存在不足。我希望保留所有这些属性:
Type 'GBP' is not assignable to type 'JPY'.__tag__键,必须使用unique symbol.<A>(Opaque<number, A>) => Opaque<number, A>。语法清晰的界面会带来更多加分,但我知道这是主观的。