【问题标题】:How much type declarations are enough in Typescript? [closed]Typescript 中有多少类型声明才足够? [关闭]
【发布时间】:2023-04-02 14:44:01
【问题描述】:

我目前对 Typescript 有更多的了解,到目前为止我真的很喜欢它。最近我想知道“多少”类型声明就足够了。

假设我们想要构建一个对象数组,它非常复杂并且包含更深的嵌套属性。例如,一个对象包含大约 50 个键。所有对象都有相同的结构。

声明该类型是由 Objects 组成的 Array 是否“足够”,还是应该声明一个 Object 的每个不同键值对的类型?

类型推断不起作用,因为数组没有在同一行声明和初始化。

我个人会说第二个想法是无稽之谈,因为它很复杂,但我很想听听社区如何处理这些案例 :-)

我对你的回答感到很兴奋。

【问题讨论】:

  • StackOverflow 可能不是解决此类问题的最佳场所,因为答案大多是固执己见,而且我们没有任何关于您的具体实施的上下文。
  • 我不同意这是基于意见的。问题基本上是:“{ [key: string]: any }[] 对对象数组来说是一个足够好的类型吗?”答案很明显是“不”。
  • "一个对象包含大约 50 个键" - 要么所有对象属性都具有相同的类型(您将其用作字典/查找映射),那么您应该正在使用 Record<string, whatever>,或者您有 50 个不同的对象属性,在这种情况下,您需要分解大小,因为没有记录应该有这么多成员。
  • @AlexWayne 的问题是打字稿绑定非常松懈。因此,为什么这是基于意见的。你可以这样做,或者你不能。现在你可以争辩说你应该强烈地输入东西,但你真的不必这样做,打字稿会很好。所以你会得到不同的意见

标签: javascript arrays typescript


【解决方案1】:

声明该类型是由 Objects 组成的 Array 是否“足够”,还是应该声明一个 Object 的每个不同键值对的类型?

通常,不,这还不够。如果这 50 个键是具有特定和唯一含义的键的有限列表,并且应用程序的其他部分需要存在,那么应该明确声明这些键。

例如:

interface MyObject {
    a: number
    b: number
    c: string
    // etc...
}

const myArray: MyObject[] = []
myArray.push({ a: 1, b: 2, c: 'three' })

声明 50 个属性可能需要大量输入,但如果每个属性都具有特定含义,那么为类型系统记录这些内容非常重要,这样您的应用程序就可以被 typescript 编译器验证为类型安全。

请注意,这也为您(开发人员)提供了生活质量功能,例如在您的编辑器中自动完成属性名称。


但是,如果您的对象只是字典并且您不提前知道它们的键,那么让您的类型适合该用例:

type MyObject = { [key: string]: number }

const myArray: MyObject[] = []
myArray.push({ a: 1, b: 2, c: 3, whoknowswhatkey: 456 })

【讨论】:

  • 感谢亚历克斯的回答。所以基本上应该声明项目内部使用的每个属性。说得通。让其他未使用的属性类型安全是最重要的,以使所有内容都类型安全,但不是必需的,对吧?
  • “未使用的属性”是什么意思?如果您有未使用的属性,那么您不应该拥有这些属性。如果你有一些没有在任何地方使用过的东西,你可能应该完全删除它。不过,在没有例子的情况下概括这一点很容易。
猜你喜欢
  • 2010-11-19
  • 2010-12-18
  • 1970-01-01
  • 2016-07-15
  • 2015-05-16
  • 2016-03-17
  • 2021-01-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多