簡體   English   中英

在接口定義中使用導入

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM