【问题标题】:Parameter of type any[] accepts non-array valueany[] 类型的参数接受非数组值
【发布时间】:2018-03-29 16:09:10
【问题描述】:

假设我有一个参数类型为any[]的函数

someFunction(args: any[]): boolean {
  // some code
}

现在我想调用该函数并传递一个包含任何类型值的数组。这应该没问题,而且是:

someFunction([value1, value2, value3]); // OK, as expected

但是,如果我传递一个不是数组的值,我希望得到一个类型错误,但我没有:

someFunction(value1); // OK, but shouldn't I get a type error?

有人能解释一下为什么这不会在编译时抛出错误吗?

【问题讨论】:

  • value1的类型是什么?
  • 没有准确回答您的情况,但作为备注:它是有效的 javascript,因为最后数组只是一种对象。根据您的 TS 编译器/转译器选项,任何有效的 Javascript 可以 是有效的 Typescript。
  • @TitianCernicova-Dragomir 可以是任何类型,比如stringnumberObject ...

标签: typescript


【解决方案1】:

问题在于,如果value1 的类型是any,那么这是有效的,因为any 与任何其他类型兼容,因此它将与any[] 兼容。

因此,例如,如果您将数字传递给函数,但如果您传递任何数字,则不会出现错误

function someFunction(args: any[]): boolean {
  return true
}
declare var value1: any;
someFunction(value1) //ok
someFunction(1) //not ok
declare var nonAny: number;
someFunction(nonAny) //not ok

【讨论】:

    【解决方案2】:

    任何类型的数组的正确语法是:

    someFunction(args: Array<any>): boolean {
        // some code
    }
    

    【讨论】:

    • any[]Array&lt;any&gt; 是等价的
    • @RagnarLothbrok 他们只是说同一件事的不同方式,他们不会有不同的行为
    猜你喜欢
    • 2023-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-03
    • 1970-01-01
    • 2020-03-19
    • 2019-01-09
    • 1970-01-01
    相关资源
    最近更新 更多