Проблема с классом generic: «Невозможно присвоить [x]` this. [Y] `, поскольку свойство [z] отсутствует» - PullRequest
2 голосов
/ 27 июня 2019

У меня есть универсальный класс, который может быть экземпляром двух разных классов.В конструкторе пользователь класса должен передать тип экземпляра для использования, затем в объекте карты я использую этот тип для получения соответствующего класса.

Несмотря на расширенную типизацию, поток продолжает жаловаться, что я могу 't сохранить экземпляр, потому что экземпляр X не совместим с экземпляром Y.

Пожалуйста, посмотрите это repro

type BrowserHistoryInstance = {|
    +foo: (number) => number
|};

type MemoryHistoryInstance = {|
    +bar: (number) => number
|};

const historyTypeMaps = Object.freeze({
    memory  : (({}: any): MemoryHistoryInstance),
    browser : (({}: any): BrowserHistoryInstance)
});

class History <InstanceType: $Keys<typeof historyTypeMaps>> {
    instance: $ElementType<typeof historyTypeMaps, InstanceType>;

    constructor(type: InstanceType) {
        this.instance = historyTypeMaps[type];
    }
}

Ошибка:

this.instance = historyTypeMaps[type];
                ^ Cannot assign `historyTypeMaps[type]` to `this.instance` because property `memo` is missing 
                in `BrowserHistoryInstance` [1] but exists in `MemoryHistoryInstance` [2].

References:
        browser : (({}: any): BrowserHistoryInstance)
                              ^ [1]
        memory  : (({}: any): MemoryHistoryInstance),
                              ^ [2]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...