如果键类型不相交,TypeScript 允许传递不正确的对象值

use*_*651 5 javascript javascript-objects typescript nominal-typing

我正在使用Type Flavoring在我的打字稿应用程序中将不同类型的键分开。但是,我注意到这有一个奇怪的副作用,即允许以下形式的对象

{[key: SomeFlavoredString]: ObjectA}
Run Code Online (Sandbox Code Playgroud)

传递给采用以下形式参数的函数

{[key: SomeOtherFlavoredString]: ObjectB}
Run Code Online (Sandbox Code Playgroud)

不抱怨,这可能会导致一些令人惊讶的错误。这里有一个游乐场

我认为发生的事情是它假设由于键类型是不相交的,所以额外的键是不相关的,因此这些不兼容键的值是不兼容的值并不重要,所以它相当于从打字稿编译器的视角。

有什么方法可以禁用此功能或坚持我的参数在任何键上都不能有任何不兼容的值?这似乎不是理想的行为