问题标签 [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.

0 投票
2 回答
5892 浏览

php - PHP 类型提示以允许 Array 或 ArrayAccess

是否可以允许实现 ArrayAccess 的 Array 或对象?

例如:

我希望能够传入 Array 或 ArrayAccess。

除了手动检查参数类型之外,有没有一种干净的方法可以做到这一点?

0 投票
3 回答
1534 浏览

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 文件以将一组填充的案例类返回给他们。

0 投票
1 回答
222 浏览

typescript - 如何在 parseInt 中使用联合类型?

我有一个值作为字符串输入,例如“1.5”如果它是一个数字,我希望它被记录为一个数字。此代码将执行 j

我有一个接口

但这给出了一个错误

'字符串类型的参数|数字未分配参数字符串'

因为 parseInt 需要一个字符串。

我怎样才能解决这个问题,或者只是停止那个警告?

0 投票
1 回答
31 浏览

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 Playground 中的代码: http://www.typescriptlang.org/play/index。html#src=declare%20abstract%20class%20SlimDocumentDatabase%3CT%3E%20%7B%0A%20%20%20%20create(obj%3A%20T)%3A%20Promise%3CT%3E%0A%20%20 %20%20create(obj%3A%20T%2C%20done%3A%20(error%3A%20Error%2C%20result%3F%3A%20T)%20%3D%3E%20void)%3A%20void%0A %7D%0A%0A%0Aclass%20SlimAdaptor%3CDocumentType%3E%20implements%20SlimDocumentDatabase%3CDocumentType%3E%20%7B%0A%20%20%20%20%2F%2F%20create(obj%3A%20DocumentType)% 3A%20Promise%3CDocumentType%3E%0A%20%20%20%20%2F%2F%20create(obj%3A%20DocumentType%2C%20done%3A%20ObjectCallback%3CDocumentType%3E)%3A%20void%0A%20 %20%20%20create(obj%3A%20DocumentType%2C%20done%3F%3A%20(错误%3A%20Error%2C%20result%3F%3A%20DocumentType)%20%3D%3E%20void)%20 %3A%20void%20%7C%20Promise%3CDocumentType%3E%20%7B%0A%20%20%20%20%20%20%20%20if%20(完成)%20%7B%0A%20% 20%20%20%20%20%20%20%20%20%20%20完成(未定义%2C%20obj)%0A%20%20%20%20%20%20%20%20%20%20%20%20返回%0A%20%20%20%20%20%20%20%20%7D%20else%20%7B%0A%20%20%20%20%20%20 %20%20%20%20%20%20return%20Promise.resolve%3CDocumentType%3E(obj)%0A%20%20%20%20%20%20%20%20%7D%0A%20%20% 20%20%7D%0A%0A%7D%0A

0 投票
1 回答
244 浏览

typescript - 为什么我不能在联合类型的变量上调用方法?

出乎意料的是,当我尝试在联合类型的变量上调用方法时出现编译器错误。我已经隔离了这个问题,请参阅下面的代码。我想知道是什么阻止了编译器理解baz应该是string. 它是某种在编译器中还没有实现(还没有?)的边缘情况吗?还是有一些根本原因导致此代码无效?

打字稿版本:2.0.6

错误是:Cannot invoke an expression whose type lacks a call signature.

游乐场

如果我在类中使用方法重载A而不是联合类型,它就会开始工作。但是,我的问题是真实的A并且B是在相对难以更改的第 3 方类型定义中定义的。

0 投票
2 回答
954 浏览

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 值的联合类型。我想过一个带有数字和枚举的联合类型,但我不确定如何充分利用它。

有小费吗?

0 投票
2 回答
810 浏览

json - Elm:如何使用单个 TypeConstructor 对联合类型进行 Json 解码?

如以下代码所示,解码 UserAlias 很容易,但当我尝试解码 UserType 时,即D.map2 UserAliasD.map2 UserType编译器替换会大声喊叫。如何修复此编译器错误?

上面的代码工作正常。现在替换D.map2 UserAliasD.map2 UserType

编译器哭了

如何解决这个错误,请帮助!

基本上我不再希望使用类型别名,而只希望使用用户 UserType,这样我就可以隐藏内部记录结构,并在不破坏公共 API 的情况下对其进行重构。

谢谢。

0 投票
2 回答
896 浏览

flowtype - 访问联合类型属性的惯用方式

访问联合中合并的类型之一中可能缺少的联合类型属性的惯用方法是什么?

类型检查导致以下错误:

@dfkaye在 twitter 上指出,如果“默认”情况下出现错误,它会起作用:

有人可以解释一下:

  1. 为什么它有效?是故意的,还是副作用?
  2. 为什么有必要?列类型始终为valueor calculation,因此永远不会发生错误情况。
  3. 有没有更好、更惯用的方法?
  4. 这是一种安全的方法,还是将来可能会中断?

PS:似乎在 TypeScript中可以使用类型断言来完成。

0 投票
2 回答
3971 浏览

typescript - TypeScript 管道运算符与字符串一起使用时是什么意思?

我知道联合类型,但是这种管道语法是什么意思?

来源:https ://blogs.msdn.microsoft.com/typescript/2016/12/07/announcing-typescript-2-1/

0 投票
2 回答
99 浏览

typescript - 联合类型没有强制执行吗?

这不应该失败吗?

在这种情况下有没有办法强制进行类型检查?