在接口定义中使用导入
Use imports inside interface definition
我在打字稿接口方面遇到了一个奇怪的问题。因为我使用的是猫鼬模型,所以我需要定义一个模型,但出于某种原因,它无法识别我明确导入的内容。这部分工作正常:
export interface ITrip extends mongoose.Document {
//
}
export var TripSchema = new mongoose.Schema({
//
});
export var Trip = mongoose.model<ITrip>('Trip', TripSchema);
现在,我正在定义另一个接口,它有一个 Trip 数组。 subdocuments.
我需要这个
import {Trip, ITrip} from '../trips/trip.model';
export interface IFeed extends mongoose.Document {
lastSnapshot: {
trips: [Trip]
}
}
TS编译报错:feed.ts(12,13): error TS2304: Cannot find name 'Trip'.
(指trips: [Trip]
)。它并没有说导入失败或其他任何内容。我什至可以在同一个文件中使用 trip 来毫无问题地创建新对象 var a = new Trip({});
。在界面里面它坏了。
Trip
不是一个类型,它是一个变量,所以你可以这样做:
let t = Trip;
let t2 = new Trip({});
但是你不能这样做:
let t: Trip;
您应该将其更改为 typeof Trip
:
export interface IFeed extends mongoose.Document {
lastSnapshot: {
trips: [typeof Trip]
}
}
另外,如果你想让IFeed.lastSnapshot.trips
成为一个数组,那么它应该是:
trips: typeof Trip[]
您申报的是 tuple 一件商品。
编辑
对于一个对象,分配总是相同的(js 和 ts):
let o = {
key: "value"
}
但是当在打字稿中声明类型时,你并没有处理值:
interface A {
key: string;
}
let o: A = {
key: "value"
}
在 mongoose 文档中,他们仅使用 javascript,因此他们的所有示例都不包含类型声明。
我在打字稿接口方面遇到了一个奇怪的问题。因为我使用的是猫鼬模型,所以我需要定义一个模型,但出于某种原因,它无法识别我明确导入的内容。这部分工作正常:
export interface ITrip extends mongoose.Document {
//
}
export var TripSchema = new mongoose.Schema({
//
});
export var Trip = mongoose.model<ITrip>('Trip', TripSchema);
现在,我正在定义另一个接口,它有一个 Trip 数组。 subdocuments.
我需要这个import {Trip, ITrip} from '../trips/trip.model';
export interface IFeed extends mongoose.Document {
lastSnapshot: {
trips: [Trip]
}
}
TS编译报错:feed.ts(12,13): error TS2304: Cannot find name 'Trip'.
(指trips: [Trip]
)。它并没有说导入失败或其他任何内容。我什至可以在同一个文件中使用 trip 来毫无问题地创建新对象 var a = new Trip({});
。在界面里面它坏了。
Trip
不是一个类型,它是一个变量,所以你可以这样做:
let t = Trip;
let t2 = new Trip({});
但是你不能这样做:
let t: Trip;
您应该将其更改为 typeof Trip
:
export interface IFeed extends mongoose.Document {
lastSnapshot: {
trips: [typeof Trip]
}
}
另外,如果你想让IFeed.lastSnapshot.trips
成为一个数组,那么它应该是:
trips: typeof Trip[]
您申报的是 tuple 一件商品。
编辑
对于一个对象,分配总是相同的(js 和 ts):
let o = {
key: "value"
}
但是当在打字稿中声明类型时,你并没有处理值:
interface A {
key: string;
}
let o: A = {
key: "value"
}
在 mongoose 文档中,他们仅使用 javascript,因此他们的所有示例都不包含类型声明。