使用接口

时间:2016-05-17 09:03:56

标签: mongoose typescript

我有一个带有Mongoose模式接口的模块,如下所示:

// Interface
export interface User extends PassportDocument
{
    person: ObjectId | Person
}

// Mongoose Schema
var schema = new PassportSchema({
    person: { type: ObjectId, required: false, ref: 'Person' }
};

我的问题是,当我在person文档上填充User时,我不明白如何正确输入内容。

.then((user: User) => {
  console.log(user.person._id); // Property '_id' does not exist on type 'ObjectId | Person'
}

如何解决这个问题,以便我可以在不创建新界面的情况下使用类型?

1 个答案:

答案 0 :(得分:1)

您需要user defined type guards.

假设person接口是包含_id属性的接口,

function isPerson(potentialPerson:any) : potentialPerson is Person {
    // person-checking logic.
}

.then((user: User) => {
    if(isPerson(user.person)) {
        console.log(user.person._id); // should work now, user.person is understood to be of type 'Person'
    }
}