问题标签 [union-types]
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.
php - PHP 类型提示以允许 Array 或 ArrayAccess
是否可以允许实现 ArrayAccess 的 Array 或对象?
例如:
我希望能够传入 Array 或 ArrayAccess。
除了手动检查参数类型之外,有没有一种干净的方法可以做到这一点?
scala - 如何定义在运行时工作的联合类型?
遵循关于如何在 Scala 中定义联合类型的优秀答案集。我一直在使用 Miles Sabin 对 Union 类型的定义,但仍然存在一个问题。
如果直到运行时才知道类型,你如何使用这些?例如:
这个例子有效,因为参数A
在编译时是已知的,并且调用Foo(1)
实际上是调用Foo[Int](1)
。A
但是,如果直到运行时才知道参数怎么办?也许你正在解析一个包含 's 数据的文件,在这种情况下,直到你读取数据才知道Foo
类型参数。在这种情况下,Foo
没有简单的方法来设置参数。A
我能想出的最佳解决方案是:
对您已阅读的数据进行模式匹配,然后
Foo
根据该类型创建不同的 '。在我的情况下,这是不可行的,因为我的案例类实际上包含几十个联合类型,所以会有数百种类型的组合来进行模式匹配。将您刚刚阅读的类型转换为
(String or Int)
,因此您有一个要传递的类型,当您使用它创建Foo
时它会传递 Type Class 约束。然后Foo[_]
改为返回。这让 Foo 用户有责任计算出每个字段的类型(因为它们看起来是 Any 类型),但至少在实际使用该字段之前必须知道类型,在这种情况下模式匹配似乎更容易处理。
第二种解决方案如下所示:
在实践中,我最终使用了第二种解决方案,但我想知道是否有更好的方法可以做?
说明问题的另一种方式是:返回联合类型是什么意思?函数只能返回一个类型,而我们对 Miles Sabin 联合类型使用的技巧只对您传入的类型有用,而不是对您返回的类型有用。
PS。对于上下文,为什么在我的情况下这是一个问题,因为我正在从 Json 模式文件生成一组案例类。Json 自然支持联合类型,所以我想让我的案例类也反映这一点。这在一个方向上很有效:用户创建要序列化到 Json 的案例类。但在另一个方向上变得棘手:用户解析 Json 文件以将一组填充的案例类返回给他们。
typescript - 如何在 parseInt 中使用联合类型?
我有一个值作为字符串输入,例如“1.5”如果它是一个数字,我希望它被记录为一个数字。此代码将执行 j
我有一个接口
但这给出了一个错误
'字符串类型的参数|数字未分配参数字符串'
因为 parseInt 需要一个字符串。
我怎样才能解决这个问题,或者只是停止那个警告?
generics - 如何声明一个可选接受回调的函数,并且只有在没有回调的情况下才返回 Promise?
运行 El Capitan 10.11.6 的 Mac 上的 TypeScript v2.0.2
我有一个执行异步操作的函数,并且:
- 要么接受回调,不返回任何内容,稍后调用回调,
- or 不接受回调,并返回一个 Promise,稍后解决。
似乎我有过类似的代码工作,(见https://github.com/psnider/mongodb-adaptor/blob/master/src/ts/MongoDBAdaptor.ts)但现在这失败了,我可以不知道为什么!
我可以通过从 create() 的实现中删除返回类型规范,将它们替换为any来编译它。但这似乎大错特错!
typescript - 为什么我不能在联合类型的变量上调用方法?
出乎意料的是,当我尝试在联合类型的变量上调用方法时出现编译器错误。我已经隔离了这个问题,请参阅下面的代码。我想知道是什么阻止了编译器理解baz
应该是string
. 它是某种在编译器中还没有实现(还没有?)的边缘情况吗?还是有一些根本原因导致此代码无效?
打字稿版本:2.0.6
错误是:Cannot invoke an expression whose type lacks a call signature.
(游乐场)
如果我在类中使用方法重载A
而不是联合类型,它就会开始工作。但是,我的问题是真实的A
并且B
是在相对难以更改的第 3 方类型定义中定义的。
typescript - TypeScript Union Types 数字或特定字符串
我正在尝试使用 typeScript 联合类型。我有一个具有数字属性的类,但我希望它具有三种特殊情况:Infinity、None 和 Auto
Infinity 和 None 可以分别用Number.POSITIVE_INFINITY
和表示NULL
,但我不知道如何处理自动值。
该值最初来自以字符串表示的 XML 文档。例如<element myValue="123"/>
<element myValue="-4096"/>
<element myValue="infinity"/>
<element myValue="auto"/>
或<element/>
如何创建可用作数字但仍具有 auto 值的联合类型。我想过一个带有数字和枚举的联合类型,但我不确定如何充分利用它。
有小费吗?
json - Elm:如何使用单个 TypeConstructor 对联合类型进行 Json 解码?
如以下代码所示,解码 UserAlias 很容易,但当我尝试解码 UserType 时,即D.map2 UserAlias
用D.map2 UserType
编译器替换会大声喊叫。如何修复此编译器错误?
上面的代码工作正常。现在替换D.map2 UserAlias
为D.map2 UserType
编译器哭了
如何解决这个错误,请帮助!
基本上我不再希望使用类型别名,而只希望使用用户 UserType,这样我就可以隐藏内部记录结构,并在不破坏公共 API 的情况下对其进行重构。
谢谢。
typescript - 联合类型没有强制执行吗?
这不应该失败吗?
在这种情况下有没有办法强制进行类型检查?