问题标签 [type-assertion]
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.
interface - 我可以键入断言一部分接口值吗?
我正在尝试从 a 键入 assert[]Node
到[]Symbol
. 在我的代码中,Symbol
实现了Node
接口。
这是一些周围的代码:
这是我得到的错误:
我确信这是有充分理由的。最好的方法是什么?
typescript - 如何在 TypeScript 中断言 HTMLElement 的类型?
我正在尝试这样做:
但它给了我一个错误:
除非我将其转换为正确的类型,否则我无法访问脚本元素的“类型”成员,但我不知道该怎么做。我搜索了文档和示例,但找不到任何东西。
go - 类型断言嵌套接口
我json.Unmarshal
将 JSON 转换为interface{}
. 我无法键入断言它。http://play.golang.org/p/NAe8voYnb8。
有谁知道怎么回事?
java - 在Java中将父类分配给子类变量
我有一个父类和一些子类(我们称它们为parent
and child1
, child2
,child3
等)。
我有一个函数,它采用二维数组parents
并将其展平为一维数组,如下所示:
在调用上下文中,我知道当我传递一个数组时,所有元素都具有相同的类型,并且该类型是子类型之一(特别是,我知道它是哪个子类型)。我希望能够获取数组的特定元素,并将其分配给正确子类型的变量,如下所示:
我知道类型断言(相关的 SO 帖子:Assert an object is a specific type),但如果断言成功,我似乎无法找到一种方法来实际分配给正确类型的变量。在Java中甚至可能发生这样的事情吗?我知道这在其他语言中是可能的,例如在 Go 中。
unit-testing - 单元测试失败,消息矛盾
我有一个名为的对象Content
,它继承自ContentBase
.
ContentBase
是一个具有很少属性的基本类。
Content
完全是空的。它只是从ContentBase
.
使用 Moq 我有这个测试:
失败并显示此消息:
当 Content 没有从 ContentBase 继承时,这不会发生,但我仍然觉得错误消息很荒谬。
Content 类包含这个 Equals:
失败的 Assert 不会触发 Equals 方法
但是下面的 Assert 确实触发了 Equals 并且测试通过了:
有没有人见过这个?
go - “点括号”语法的含义是什么?
我正在研究一个将数据存储在 mongodb 中的示例 Go 应用程序。这一行的代码(https://github.com/zeebo/gostbook/blob/master/context.go#L36)似乎访问了存储在大猩猩会话中的用户ID:
有人可以向我解释一下这里的语法吗?我知道这sess.Values["user"]
会从会话中获得价值,但接下来的部分是什么?为什么括号中的点后面的表达式?这是函数调用吗?
linux - syscall.Sockaddr 类型断言
我正在打开一个 Linux 数据包套接字并尝试将接收到的数据包读入一个结构:
根据文档(http://golang.org/pkg/syscall/#Recvmsg)Recvmsg()
返回 msghdr 作为 asyscall.Sockaddr
并且我在上面概述的代码片段有效。
打印出pkt.from
struct成员,可以看到Sockaddr
界面中的值:
但是,如果我尝试访问它们,则会收到错误消息:
通过reflect.TypeOf(pkt.from)
我发现它是 type *syscall.SockaddrLinklayer
。尝试进行分配时,尝试将我的msg
struct 成员更改为该类型失败,Recvmsg
因为它不是 type syscall.Sockaddr
。
我能够使用类型断言:
我对 Go 很陌生;这是我的第一个静态类型语言,所以我不明白Recvmsg
func如何需要asyscall.Sockaddr
但返回 a *syscall.SockaddrLinklayer
?我显然错过了一些非常基本的东西。另外,使用类型断言是正确的方法吗?感觉不太对劲……但我真的没有资格做出这样的判断!
callback - 如何对 interface{} 变量进行类型断言以测试它是否是函数?
我正在尝试编写一个函数,该函数既可以接受某种类型的任意类型的内容,也可以接受可以生成和返回任意类型的函数。为此,我必须能够通常测试参数是否是函数,而无需测试它是否是返回类型 X 的函数。我该怎么做?可能如下所示:
这失败了。也许类型断言不是在这里使用的东西。或者也许我只是不知道语法。将不胜感激任何建议。我目前唯一知道要做的就是把它分成两个函数,一个接受要按原样存储的数据,另一个期望得到一个函数,但这似乎有点过头了,因为在这两种情况下,目标只是得到一个值并将其传递给函数的其余部分。
对此有什么想法吗?
json - 可以使用恐慌/恢复作为测试成功类型断言的方法吗?
我一直在研究一种尝试解析嵌套 JSON 响应而不将信息映射到预定义结构的方法。
使用空白界面,它返回为:
因此,我使用以下内容来导航此信息:
这是从 JSON 字符串解析信息的可接受方式,还是有更可取的方法?
以下是使用上述内容解析出我当前正在使用的正确信息的示例:
任何见解将不胜感激!谢谢!
casting - 类型断言/类型切换是否性能不佳/在 Go 中运行缓慢?
在 Go 中使用类型断言/类型切换作为运行时类型发现的方法有多慢?
例如,我听说在 C/C++ 中,在运行时发现类型的性能很差。为了绕过它,您通常将类型成员添加到类中,因此您可以与这些成员进行比较而不是强制转换。
我在整个 www 中都没有找到明确的答案。
这是我要问的一个示例 -与其他类型检查方法(如上面提到的或我不知道的其他方法)相比,这是否被认为快?