sampleDocument не может быть назначен типу T - PullRequest
0 голосов
/ 23 января 2020

Я новичок в TypeScript и пытаюсь с ним справиться OOP.

У меня есть следующий код:

import {ReadOnlyDocument} from "../../docs/read-only.document";
import {IReadOnlyRepository} from "./abstract/Iread-only.repository";
import {sampleDocument} from "../../docs/sampleDocument";

export abstract class ReadOnlyRepository<T extends ReadOnlyDocument> implements IReadOnlyRepository<T> {

    public getById(id: string): T {
        let sample: sampleDocument = new sampleDocument('',
            new Date(),
            '',
            new Date(),
            '');
        /*Line of code that brings the error.*/
        return sample;
    }

}

Однако я продолжаю получать сообщение об ошибке sampleDocument нельзя назначить типу T , и я не могу понять, что не так. Любая помощь будет высоко ценится.

Я добавил другой, возможно, соответствующий код ниже.

import {ReadOnlyDocument} from "./read-only.document";

export class sampleDocument extends ReadOnlyDocument{

}
export abstract class Document {
    constructor(
        public id: string,
        public createdDate: Date,
        public createdBy: string,
        public updatedDate: Date,
        public updatedBy: string
    ) { }
}
import { Document } from './abs/document'

export abstract class ReadOnlyDocument extends Document{

}
import {ReadOnlyDocument} from "../../../docs/read-only.document";
import { IRepository } from "./Irepository";

export interface IReadOnlyRepository<T extends ReadOnlyDocument> extends IRepository<T> {
    getById(id: string): T;
}
import {Document} from "../../../domain/documents/abstract/document";

export interface IRepository<T extends Document>  {

}

1 Ответ

0 голосов
/ 23 января 2020

T - это любой подтип из ReadOnlyDocument, поэтому, например, если у вас есть ReadOnlyPDF, и это расширяет ReadOnlyDocument, то вы можете создать ReadOnlyRepository<ReadOnlyPDF>, и вы ожидаете, что он вернуть ReadOnlyPDF из getById, однако возвращается только ReadOnlyDocument.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...