Typescript:每个元素具有不同类型的类型数组

ope*_*sas 6 arrays casting typescript jestjs

我想定义一个类型化数组,指定第一个元素的类型,第二个元素的另一种类型,依此类推......

事实上,我正在尝试摆脱以下强制转换:

const cases = [
  [ 'http://gmail.com', false ],
  [ '/some_page', true ],
  [ 'some_page', false ]
]

describe("'isInternalLink' utility", () => {
  test.each(cases)(
    "given %p as argument, returns %p", (link, result) => {
      expect(
        isInternalLink(<string>link)
      ).toEqual(
        <boolean> result
      )
    }
  )
})
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,其中的每个元素cases都是一个数组,其中第一个元素是字符串,第二个元素是布尔值......

需要明确的是,我不需要一个string | boolean类型的数组,我想要一个第一个元素是字符串、第二个元素是布尔值的数组。

知道如何改进吗???

Bri*_*ams 6

cases是一个Array,其中的每个元素cases都是一个Tuple,所以如果你cases这样定义:

const cases: [string, boolean][] = ...
Run Code Online (Sandbox Code Playgroud)

...或者像这样:

const cases: Array<[string, boolean]> = ....
Run Code Online (Sandbox Code Playgroud)

...然后link将是 astring并且result将是 aboolean并且您的测试可以简化为:

describe("'isInternalLink' utility", () => {
  test.each(cases)(
    "given %p as argument, returns %p", (link, result) => {
      expect(isInternalLink(link)).toEqual(result)
    }
  )
})
Run Code Online (Sandbox Code Playgroud)