【问题标题】:TypeScript typed function argument accepts anyTypeScript 类型化函数参数接受任何
【发布时间】:2015-08-26 21:55:40
【问题描述】:

这是一个可以很好编译的 TypeScript sn-p(使用 1.5.3)。

function alertNumber(a: number) {
    alert(a + 1);
}
var x:any = "string";
alertNumber(x);

如何使用any类型的参数调用某个类型的函数请求参数?

【问题讨论】:

    标签: typescript


    【解决方案1】:

    这是因为您在使用 any 类型时选择不进行类型检查。

    [有时]我们希望退出类型检查并让值通过编译时检查。为此,我们将它们标记为“任何”类型。 - Handbook

    为了避免any的麻烦:

    1. 使用--noImplicitAny 编译器选项(或在Visual Studio 中关闭Allow implicit any types)。
    2. 除非必要,否则不要使用显式的any 类型(例如var x: any

    【讨论】:

    • 即使我现在明白了它是如何工作的,但我仍然觉得它很奇怪。即使没有--noImplicitAny 选项,我也会假设当我将类型添加到函数声明时,它将要求任何调用者传递该类型。 any 的含义应该仍然是“这可以是任何东西”,但您不应该只是在需要特定类型的地方传递“任何东西”变量。
    • @LukasH 我看到你已经用 c# 编程了。 any 类型目前像 c# 中的动态变量一样工作(例如,dynamic str = "asdf"; int num = str; 可以)。所以就像你应该如何避免在 c# 中使用动态类型一样,我建议在 TypeScript 中避免使用 any 类型。
    • 我理解你的意思,但是当你将现有的 javascript 项目转换为 typescript 时,很难避免any。对于这种工作流,打开--noImplicitAny 不是一种选择,因为它需要重写整个代码库。我想要的any 是一个可以具有任何属性的对象,但是您不能将它传递到请求某种类型的任何地方。
    • @LukasH 我打开了this github issue
    猜你喜欢
    • 1970-01-01
    • 2014-12-16
    • 2021-03-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-03
    • 2018-09-15
    • 2015-11-10
    相关资源
    最近更新 更多