typescript 和解构数组

标签 typescript

我的 typescript 有这个问题,无法理解出了什么问题:

type Dogs = {bark: true};
type Cats = {meow: true};

........
.then((data: [Dogs, Cats][]) => {
  const [dogs, cats] = data;
  display(dogs, cats));
})
........

const display = (dogs: any, cats: any) => {
  return ....
}

目前,一切都还好。当 display 函数这样写时(dogs:any,cats:any),一切都很好,但是如果我将 display 函数更改为:

const display = (dogs: Dogs, cats: Cats) => {
  return ....
}

我在解构行(const [dogs, cats] = data;)中收到错误“狗没有喵喵键,猫没有吠键”???

我做错了什么?

最佳答案

data 是一个 [Dog, Cat] 数组,因此解构 const [dogs, cats] = data; 将导致赋值data 的第一个元素为 dogs,第二个元素为 cats。即,提取的值dogs 的类型为[Dog, Cat]。提取的 cats 类型为 [Dog, Cat]

const [狗,猫] = data[0];

将正确解构以给出正确的狗和猫值。如果您想将狗和猫的集合放入单独的数组中,则可以使用 reduce

type Dogs = {bark: true};
type Cats = {meow: true};

const data: [Dogs, Cats][] = [[{bark: true}, {meow: true}]]

const display = (dogs: Dogs, cats: Cats) => {
  return 'dummy'
}

let result: {dogs: Dogs[], cats: Cats[]} = {dogs: [], cats: []};

data.reduce((acc, curr) => {
  const [dog, cat] = curr;
  
  acc.dogs.push(dog);
  acc.cats.push(cat);
  return acc
}, result);

关于 typescript 和解构数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63682608/

相关文章:

angular - 检查 Angular 7 中递归对象的属性

typescript - 为什么此代码片段允许 Typescript 从 "parent"函数推断泛型?

TypeScript 0.9.5 - ...args : any[] dead in the water?(查看 Q.d.ts)

typescript - 为什么 typescript 编译器会在以哈希字符开头的 .ts 文件上静默退出?

html - Angular 组件上的条件样式表?

reactjs - 如果 react-script 比 3.0.0 更新,则会出现错误消息 "' Office' is not defined no-undef"

javascript - 在 Typescript 中实例化对象,遵循松散耦合

angular - 在 Angular2 的英雄之旅中找不到模块 './in-memory-data-service'

javascript - 在 TypeScript 中向 JavaScript 对象添加数据

javascript - 将回调函数分配给变量并在高阶函数之外调用