繁体   English   中英

在 Typescript 中访问类型为对象或数组

[英]Acessing type as object or Array in Typescript

我是打字稿的新手。

我有一个这样的课程

class Document {
  constructor (data, id) {
    this.data = data
    this.id = id
  }
}

在这里,我知道 Id 将是String但 data 将是objectarray

有人可以帮我弄清楚它的界面是什么。

[更新:] 我试过什么?

我创建了一个这样的界面

interface Documents {
  data: Array | Object,
  id: Number
}

但这会产生以下错误(数组下方的红色下划线)

通用类型“数组”需要 1 个类型参数。

如果有任何区别,我希望我的数组为empty或包含objects列表

您需要指定数组的底层类型,因为 Array 是类型构造函数。 在可能的情况下,我会错误地使用原始类型。 此外,如果您的数据是一个对象、一个空数组或一个对象列表,我会保持简单并将其定义为一个(可能是空的)对象列表。 所以你可能会得到这样的结果:

type DocData = [object]
interface DocumentInterface {
  data: DocData
  id: number
}

class Doc implements DocumentInterface {
    data: DocData
    id: number

    constructor (data: DocData, id: number) {
        this.data = data
        this.id = id
    }
}

你可以让Documents成为一个通用的接口,你的data需要是数组还是对象,你存储在数组中的数据是什么类型的?或者对象的类型是什么? 类型可以是一些东西,比如UserStore ...

例子:

interface Documents<T extends object> {
  data: Array<T> | T;
  id: number; // best practice: https://www.typescriptlang.org/docs/handbook/declaration-files/do-s-and-don-ts.html 
}

你还有另一种类型,比如:

interface IUser {
  name: string,
  email: string,
}

现在您需要创建一个dataIUser的文档:

const doc: Documents<IUser> = {
  id: 1,
  data: {
    name: 'Tom',
    email: 'example@mail.com'
  }
}

data将存储许多IUser

const docs: Documents<IUser> = {
  id: 1,
  data: [{
    name: 'Tom',
    email: 'example@mail.com'
  }]
}
class Document {
    private data: [] | object;
    private id: string;
  constructor (data: [] | object, id:string) {
    this.data = data
    this.id = id
  }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM