当前位置: 首页 > 知识库问答 >
问题:

键入一组显式值类型的数组[重复]

闻人伟
2023-03-14

我正在试图找出如何在TypeScript中为以下值定义类型:

[{"source": "bar"}, 1483228800, 1484265600]

到目前为止,我提出的唯一方法是:

interface FieldSource {
  source: string;
}

interface SearchWhereClause {
  between: [FieldSource, number, number]
}

这编译得很好,但我不确定这是否是正确的方法。

我看到我可以做到:

(FieldSource | number | number)[]

但在我的例子中,我明确地希望数组包含我的对象和两个数值。

有人能给点建议吗?

谢谢

共有2个答案

马丰
2023-03-14

但在我的例子中,我明确地希望数组包含我的对象和两个数值

如果这确实是您想要的,那么您当前的方法是100%正确的,需要注意的是,该数组中的类型必须按该顺序出现。

<代码>(字段源代码)[]<代码>与<代码> [字段源、编号、编号] /代码>有很大不同,请考虑以下内容:

interface MyInterface {
  prop: number
}

type MyTuple = [MyInterface, number, number]
type MyArr = (MyInterface | number)[]

const myTup: MyTuple = [{ prop: 2 }, 2, 2] // <-- can only have two numbers
const myArr: MyArr = [{ prop: 2 }, 2, 2, 2, 2] // <-- can have any amount of numbers
const myArrAsTup: MyTuple = [{ prop: 2 }, 2, 2, 2, 2] // <-- not assignable to type

(FieldSource | number)[,它与(FieldSource | number | number)[相同,表示数组可以以任何顺序和数量包含这些值中的任何一个。

[FieldSource, number, number]称为元组类型,它允许您强制执行数组中允许的类型,以及这些类型的位置和数组的长度。

type MyTuple = [MyInterface, number, number]

const tupleOne: MyTuple = [2, 2, {prop: 2} ] // <-- not assignable
const tupleTwo: MyTuple = [2, {prop: 2}, 2] // <-- not assignable

这还允许typescript通过索引或分解结构轻松推断从阵列检索到的实体类型:

const [interfaceInstance] = myTup // <-- type is MyInterface
const aNumber = myTup[1] // <-- type is number

如果无法确保类型顺序(或不希望),则始终可以对多个元组使用并集:

// less verbose, worse inference
type TupleMember = (MyInterface | number)
type MyTuple = [TupleMember, TupleMember, TupleMember]

// more verbose, can still infer types of tuple members
// as long as those tuples are created somewhere in your codebase
// and not the result of something else, like an API call
type MyTuple = 
  [MyInterface, number, number] |
  [number, MyInterface, number] |
  [number, number, MyInterface]
何麻雀
2023-03-14

正如@hereticMonkey在问题的评论中提到的,这在很大程度上是在TypeScript中使用多种类型定义数组的重复

特别针对您的问题,因为您正在寻找显式集合。元组就是答案。

(FieldSource|数字|数字)[]Array相同

附带说明的是,我建议在接口上使用typefieldsource={source:string},除非您在课堂上使用它。与接口相比,它是一种更强大、更直接、更灵活的结构。

 类似资料:
  • 问题内容: 我有以下数组: 结果: 现在如何显示具有重复值的键?在此函数不应返回([0],[9]),因为没有重复的值。 如何找到相同值的键,例如 对于“ 2011-06-25”,应返回[7],[8] 问题答案: 函数名称显然很长;) 现在$ dups将包含一个由重复值键控的多维数组,其中包含每个重复项的键,如果您将“ true”作为第二个参数发送,它将返回没有重复值的原始数组。 或者,您可以将原始

  • 问题内容: 我有一个包含TEXT等数组的复合类型。我在主表中使用它来创建复合类型的数组。 如何生成INSERT命令(不使用复合类型的默认字段名称)?我可以使用复合数组创建一个TEMPORARY TABLE,然后将其插入主表吗? 例如: 第一个INSERT失败,并显示以下消息: 错误:INSERT具有比目标列更多的表达式。 有或没有array []构造都失败。 我的实际使用情况要复杂得多,因为该复合

  • 我被困在创建一个具有键和数组值的模型上。但是我无法得到我预期的结果。指导我如何达到预期效果

  • 我有以下数组 我想从这个数组中得到唯一的值。所以我希望我的结果是这样的 我使用了数组唯一函数,但无法得到结果 如果我有两个索引,这是有效的,但是对于多个索引呢?

  • 我有两个多维数组,我想通过使用其中一个数组的值和另一个数组的键来组合它们。数组如下: 阵列1: 阵列 2: 我想生成的结果数组如下: 有没有一个PHP函数可以用来完成这个任务?

  • 问题内容: 我是Java的新手,所以这有点令人困惑 我想获取json格式的字符串 我想要的结果是 我目前正在做的是这样的: 我得到这个结果 我试过了,但是没用json.put(“ user”,json.put(“ name”,“ Lamis”))); 问题答案: 试试这个: 但是,您显示的“错误”结果将比“正确”结果更自然地映射“存在一个名称为“ lamis”的用户”。 您为什么认为“正确”结果更

  • 我正在尝试将key+value推入具有其唯一值的数组中。 像这样尝试: console.log输出给出正确的值: 我要做的是将键和值推入输入字段,这样输入字段将是:username:password: 不需要硬编码,因为我数组中的每个对象都有不同的键和值。

  • 问题内容: 如何在Go for map中将键创建为数组。例如在ruby中,我可以这样实现: Golang的外观如何? 问题答案: 数组类型(不像片)在Go具有可比性,所以在它什么神奇:你可以定义它像任何其他地图:这里会和会。 该比较操作符 ==和=必须为键类型的操作数被完全定义!; 因此,键类型不能为函数,映射或切片。 输出: 在Go Playground上尝试一下。 要查询元素: 您还可以一步创