Пусть линтер распознает тип "Ref <T>" как "T" вместо "ObjectId" - PullRequest
0 голосов
/ 30 января 2020

Когда у меня есть класс, подобный следующему:

export class Application{
    @prop({ required: [true, 'app name is required'], unique: true })
    name!: string;

    @prop({ required: [true, 'component is required'], ref: Component})
    component!: Ref<Component>;
}

И, предполагая, что класс «Компонент» имеет свойство «name», я не могу сделать это:

let app: Application
const appName = 'appTest';
app = await (await this.findOne({ name: appName })).populate('component').execPopulate();
console.log(app.component.name);

, потому что это дает мне следующую ошибку:

Property 'name' does not exist on type 'Ref<Component, ObjectId>'.
Property 'name' does not exist on type 'ObjectId'

Есть ли способ, которым я могу заставить линтера воспринимать тип как T (из Ref<T>), а не как ObjectId?

1 Ответ

1 голос
/ 31 января 2020

На данный момент, что мне очень помогло, так это использование защиты типов, в частности isDocument и isDocumentArray из Type goose. Было бы что-то вроде этого:

let app: Application
const appName = 'appTest';
app = await (await this.findOne({ name: appName })).populate('component').execPopulate();
if (isDocument(app.component)) {
console.log(app.component.name);
}
...