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

0 投票
1 回答
43 浏览

c# - C#混淆隐式类型变量与动态

如果你运行 TestClass.Test() 你会得到一个 RuntimeBinderException。这一切都始于var str = DoSomething(obj);隐式键入动态而不是字符串。有人可以解释这里发生了什么吗?为什么RequiresString(str);有效?我知道你不能在动态对象上调用扩展方法,但这整件事对我来说有点肮脏和破碎。尽管存在明显的类型不匹配,但一切编译良好,然后在运行时失败。

0 投票
2 回答
125 浏览

typescript - 打字稿隐式类型(不是任何隐式)

在我从事的 Typescript 项目中,我无法再访问,我记得似乎能够执行以下操作:

作为 Typescript 的新手,它似乎相当于写这个:

基本上,在我看来,如果我在函数中以本机类型命名变量,它似乎隐含地被键入为该类型,而不是any.

不过当时我对 Typescript 还是很陌生,所以完全有可能真的发生了其他事情,我只是误解了这种情况。

现在我正在尝试建立自己的打字稿项目,我想对其进行配置以再次允许该功能。我不知道该怎么做,或者我所想的是否是一个真正的 Typescript 功能。

这是 Typescript 中的真正功能吗?

如果是,我该如何配置 Typescript 来做到这一点?

0 投票
0 回答
28 浏览

idris - 为什么在函数位置时未绑定的隐式无效?

在Idris ch 3的类型驱动开发中,Brady 说

Idris 不会将每个未定义的名称视为未绑定的隐式名称 - 仅以小写字母开头并且单独出现或出现在函数参数中的名称。鉴于以下情况,

test: f m a -> b -> a

...f不被视为未绑定的隐式,这意味着必须在其他地方定义它才能使此类型有效。

为什么 Idris 不能f像推断其他变量的类型一样推断?

0 投票
1 回答
54 浏览

scala - 隐式转换作为参数有什么意义?

我正在阅读有关 Scala 中的implicits 的文档,并且有一个以隐式转换作为参数的函数示例:

我了解它是如何工作的,但我不明白这样写它的意义何在:

据我所知,如果存在从参数seq到类型的转换Seq[T],编译器仍然允许调用getIndexExplicit?

为了说明我的观点,我准备了这个简单的例子:

事实上,这两个函数似乎都以相同的方式工作:

如果没有区别,那么显式定义隐式转换有什么意义?

我的猜测是,在这种简单的情况下,它没有任何区别,但它必须有一些更复杂的场景。那些是什么?

0 投票
1 回答
223 浏览

swift - 将内联显式类型注释添加到具有返回值但在 Swift 中没有输入参数的闭包?

通常一个函数不需要显式类型,因为它可以从上下文推断类型:

通常,您需要提供显式类型注释以强制它使用特定类型,或者在编译器无法推断类型的情况下。当您有输入参数时,这很简单:

但是,如果您没有输入参数,我不确定语法应该是什么样子:

错误:预期的表达式

我尝试了所有这些变化都无济于事:

  • let f = { -> Double in:“错误:预期的表达”
  • let f = { _ -> Double in:“错误:无法在当前上下文中推断闭包参数'_'的类型”,这也将其更改为接受一个参数,这不是我想要的。
  • let f = { Void -> Double in:“错误:无法在当前上下文中推断闭包参数'Void'的类型”
  • let f = { Never -> Double in:“错误:无法在当前上下文中推断闭包参数‘从不’的类型”

我可以通过在末尾添加一个as子句来使其工作,但是如果无法使用这种语法为闭包定义一个显式的返回类型,这似乎很冗长并且像是一种疏忽。

as如果没有输入参数,如何为闭包定义显式返回类型(使用内联语法而不是)?


注意:如果已经存在另一个问题,我很乐意将其作为重复项关闭。(我尝试使用这些术语搜索重复项explicit type annotation closure return only,但找不到任何相关内容。)

0 投票
0 回答
112 浏览

c# - 为什么隐式类型的本地人总是可以为空的?

考虑以下代码,它是在启用了可空引用的上下文中编写的:

s被隐式键入为 astring?而不是 a string

这是设计使然,正如MSDN 的 var 官方文档中提到的那样:

当 var 与启用的可空引用类型一起使用时,它始终暗示可空引用类型,即使表达式类型不可为空。

但这是为什么呢?是因为变量可能会在以后重新分配吗?

此外,即使它是键入的,因为string?我可以在没有警告的情况下取消引用它:

但是,如果我创建另一个确实返回 astring?的方法,如果我尝试取消引用,编译器现在会发出警告,即使两个变量都键入为string?

答案基本上是“编译器在后台跟踪空状态”,并且隐式类型的变量类型有点被忽略吗?

我觉得这很奇怪,因为在这两种情况下,s都键入为string?,但只有在后一个示例中,如果我在没有检查的情况下取消引用,编译器才会发出警告。需要明确的是,这是我最终所期望的,但正是我们到达那里的方式让我感到困惑。

0 投票
0 回答
44 浏览

typescript - 类型推断方法返回

如何将data属性隐式传递给new MockBuilderin .withArrayObject('data', 6, () => new MockBuilder()

我不想在嵌套中分配类型new MockBuilder

操场

0 投票
1 回答
19 浏览

typescript - 如何允许作为类键的字符串

我有以下功能:

应该是 T 中的property键(作为字符串?),不应接受其他值。我试过了,property: [key in t]但这不起作用。有没有办法做到这一点?

0 投票
1 回答
60 浏览

typescript - 为什么 TypeScript 在分配给新的空数组时不暗示数组类型?

我通常有以下代码:

在这种情况下,a将是any[]or never[](取决于环境)而不是SomeType[]. 如果我指定noImplicitAny那些暗示any[],编译器会抛出一个错误。

我知道下面的演员表解决了这个问题,但为什么 TypeScript 不能从中推断出类型this.foo


可重现的代码:

tsconfig.json

test.ts

TypeScript 投诉(至少在 VS Code 中): 在此处输入图像描述