【问题标题】:Typescript array being passed as object, testing with typeof operatorTypescript 数组作为对象传递,使用 typeof 运算符进行测试
【发布时间】:2022-08-20 19:13:51
【问题描述】:

这是一个愚蠢的问题,但我有一个功能:

export function parseSomething(someList: string[]): string[] {
    someList.forEach((someField: string) => {
        console.log(typeof someField)
    })

someField 被解读为 object。为什么?传递给此函数的对象是一个字符串数组。

  • 您必须向它传递一个对象数组。类似parseSomething([{},{}] as any)。记录它,扫描您的代码库以查找调用,确保它们看起来输入正确等
  • 我贴了一个答案。请看一下。

标签: javascript typescript


【解决方案1】:

typeof 运算符返回一个字符串,指示未计算的操作数的类型。它确实适用于执行时间,因此此时没有 TypeScript。 JavaScript 中没有数组类型,因为数组是对象。您可以阅读 mdn 以了解有关 JavaScript 类型的更多信息。

Arrays 仅在使用 linter 编写代码和使用编译器进行编译时存在,因为它是仅限 TypeScript 的类型。您可以使用Array.isArray() 来测试someField 是否是执行时间的数组,例如:

console.log(Array.isArray(someField))

要知道有一个特定于 TypeScript 的 typeof 与上面的不同,可以在类型定义中使用,如下所示:

let s = "hello";
let n: typeof s;

【讨论】:

  • 嗯,我不认为这回答了这个问题。此外,我希望强类型语言在传递不正确的类型时抛出异常,但由于某种原因,这里不会发生
  • 是的,但这就是 JavaScript,也是我们需要 TypeScript 的原因。即使结合起来,它们也不是动态类型的语言。
  • @AviJain 这 100% 回答了这个问题。您可以see here 对数组调用 typeof 将返回 object。此外,JavaScript 不是一种强类型语言(这是 typescript 成为一件事的重要原因)。正如@yousoumar 所说,打字稿在运行时不存在,因此不会引发任何异常。你可以找到更多关于什么是打字稿的信息here
猜你喜欢
  • 2020-06-27
  • 2015-11-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-01-10
相关资源
最近更新 更多