[英]Acessing type as object or Array in Typescript
我是打字稿的新手。
我有一个这样的课程
class Document {
constructor (data, id) {
this.data = data
this.id = id
}
}
在这里,我知道 Id 将是String
但 data 将是object
或array
。
有人可以帮我弄清楚它的界面是什么。
[更新:] 我试过什么?
我创建了一个这样的界面
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
需要是数组还是对象,你存储在数组中的数据是什么类型的?或者对象的类型是什么? 类型可以是一些东西,比如User
, Store
...
例子:
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,
}
现在您需要创建一个data
为IUser
的文档:
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.