[英]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數組。 我需要這個用於子文檔 。
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[]
您聲明的是一個項目的元組 。
對於對象,分配總是相同的(js和ts):
let o = {
key: "value"
}
但是,當在打字稿中聲明類型時,則無需處理值:
interface A {
key: string;
}
let o: A = {
key: "value"
}
在貓鼬的文檔中,他們僅使用javascript,因此所有示例均不包含類型聲明。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.