在TypeScript中,当调用函数时,为什么可以提示null参数具有其他类型?

Z

我试图了解TypeScript行的A编译方式,而行B却没有。

function someFunction<T>(arg: T): void {
  console.log(arg)
}

someFunction<string>('some string') // obviously, it works
someFunction<string>(null)          // [A] compiles
someFunction<string>(2)             // [B] doesn't compile

在第3行中A,我暗示编译器该参数是类型的,string而显然不是。但是,TypeScript将编译该行而不会发出任何错误。

这不会在B行中发生。我传递了anumber并暗示它是a string

怎么行A不会失败编译?类型是否有特殊情况null

尽管进行了谷歌搜索,但我找不到令人满意的解释。欢迎提供指向资源的链接,以解释我的代码中发生的事情。

卡卡992

除非您启用strictNull签入功能tsconfig.json否则所有类型都隐式undefinednull类型。因此,当您键入内容时string,基本上就是这样string | undefined | null我绝对建议启用该选项,因为它会捕获很多不需要的错误。

您可以在此处了解更多信息:https : //basarat.gitbook.io/typescript/intro/strictnullchecks

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

为什么在调用函数之前和函数内部我的go函数参数具有不同的大小?

如果Kotlin中的类型参数受另一个类型参数的限制,为什么不能有其他限制?

为什么在此示例中参数b具有类型a?

如果我们可以简单地调用函数来实现,为什么要将函数作为参数传递给其他函数呢?

为什么将具有不同参数类型的函数存储到带有void *参数UB的函数指针中?

为什么被调用函数中的参数必须具有其他“名称”,而不与调用它的名称相同?

为什么在Kotlin中可以将高阶函数的扩展函数参数作为常规函数调用?

当将这些参数传递给类型化的函数时,为什么TypeScript不推断函数的参数类型?

为什么order_by在数据库中具有null的其他行为?

为什么在C ++中的特定函数重载内不能调用同一函数的其他重载?

HTML onSubmit / onClick处理函数可以具有除event以外的其他参数吗?

为什么可以将其他类型的参数传递给函数?

通过Typescript中的其他函数参数推断函数参数的类型

为什么传递参数时必须在addeventlistener中具有匿名函数?

为什么可以传递其他类型

为什么函数可以返回字符数组,而不能返回其他类型的数组?

为什么有时在使用 Comparable 或其他接口时必须在尖括号中声明类类型?

调用返回具有共享特征的不同类型并传递给其他函数的函数

使用 Kotlin 中的高阶函数,为什么 lambda 会显示在其他函数参数之外?

什么是在 C++ 中调用的具有类类型的函数?

在具有类型参数的函数中调用的类型类方法

如何指定参数对象具有键并允许任何其他键的函数类型?

打字稿:具有联合类型 T 的 n 个参数的函数,当调用者必须匹配类型时,为什么推断一个参数的类型不能推断全部?

如何使用带有函数类型和其他类型的接口参数调用方法

为什么返回类型“null”(或任何其他类型)可以分配给返回类型“void”?

如何在带有附加参数的其他函数中调用带有参数的函数?

当我在其他函数中修改变量“num1”时,为什么它没有改变?

为什么具有不同调用约定的函数仍然可以相互调用?

为什么将指针传递给具有常量指针类型参数的函数时不需要类型转换?