问题标签 [nominal-typing]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
typescript - TypeScript 泛型与 Java 有何不同?
以下代码会在 Java 中产生预期的类型错误,但 TypeScript 并不认为这是错误。这是设计使然,还是 TypeScript 中的错误?
事实上,TypeScript 甚至不认为这是一个错误:
TypeScript 是否将所有类视为结构类型而不是名义类型?我习惯于 Java 和 Flow 将类视为名义类型。
typescript - 品牌字符串作为字典的键
与问题TS 品牌字符串作为对象的键类似,我想使用品牌字符串作为我的字典的键,但然后更进一步。在我的用例中,键的品牌类型与保存在该键下的对象有关。
通过使用Map
类型,我可以强制使用我的品牌Id
类型作为字典的键,如下所示
不幸的是,这意味着整个映射必须是处理程序类型之一或联合HandlerVariant
类型,这与仅使用第一个示例中的字典具有几乎相同的效果。
我希望能够做的是取决于品牌,像这样推断它下面的处理程序的正确类型
由于key
带有HandlerA
type 标记,因此在该键下应该是 type 的对象,HandlerA
但 typescript 可悲地推断handler
为 type HandlerVariant
。
有没有办法键入这个字典,以便索引访问知道关键的品牌/价值关系?我知道有一些方法可以通过实现 getter 方法来做到这一点,但在我的情况下,这意味着需要进行实质性的重构工作。
typescript - 在 Typescript 中做名义类型的最强方法?
我在 Typescript 中看到了许多不同的方式来处理名义类型,但它们似乎都在某些方面有所不足。我希望保留所有这些属性:
- 必须有明确的(不一定简洁,但如果是的话,但加分)编译器错误消息传达哪些不透明类型,例如
Type 'GBP' is not assignable to type 'JPY'
. - 必须是真正唯一的以避免意外匹配相似的不透明类型,即没有
__tag__
键,必须使用unique symbol
. - 必须能够拥有采用不透明类型共享相同底层原始类型的安全泛型函数,例如
<A>(Opaque<number, A>) => Opaque<number, A>
.
语法上干净的界面可以获得更多奖励积分,但我知道这是主观的。
typescript - 有没有办法让 TypeScript 在类型级别区分两个空值?
TypeScript 字符串类型可以通过向类型添加一个带有唯一符号的额外字段来使其唯一。但是,这似乎不适用于空值。请参阅以下示例代码。有什么方法可以在类型级别区分两个空值?
我经常使用在各种错误情况下使用空值的现有代码库。我正在探索将名义类型添加到 null 值的可能性,作为更适当的错误处理的第一步。使用名义上类型化的 null 值的主要好处是它可以让我引入适当的类型签名,而不会强迫我立即更改运行时实现。
correlation - 使用名义关联函数获取错误“无法在具有新类别的分类上设置项目,首先设置类别”
我正在尝试使用 dython 模块中的标称来显示我的分类变量之间的关联。得到错误Cannot setitem on a Categorical with a new category, set the categories first
。有人遇到过这个吗?
typescript - 两个等价类型可以声明为不兼容吗?
我有一些代表唯一 ID 的等效类型:
虽然这些实际上是引擎盖下的同一类型。我希望他们彼此不相容。
所以这应该没问题:
但是之后
应该抛出一个打字稿错误。
这可能吗?