Typescript Тип анонимного класса - HOC - PullRequest
0 голосов
/ 19 марта 2019

Я пытаюсь создать универсальный HOC, однако у меня возникли некоторые проблемы с типами

Давайте начнем с простого:

class Abc extends React.Component<{}> {

    hello() {
    }

    render() {
        return <View />
    }
}

ссылка в JSX, никаких проблем

<Abc
    ref={(r: Abc) => {
        r.hello();
    }}
/>

теперь давайте создадим аноним, точно так же, как HOC вернет

const Bcd = class extends React.Component<{}> {

    hello() {
    }

    render() {
        return <View />
    }
}; 

сделаем то же самое, что мы делали в прошлом

<Bcd
    ref={(r: Bcd) => {
        r.load()
    }}
/>;

теперь мыget TS2304: Cannot find name Bcd, для следующего (r: Bcd).

Я пытался изменить его на (r: (typeof Bcd)), но потом жаловался бы, что typeof Bcd несовместим с Bcd

Я что-то не так делаю или такой набор текста не поддерживается машинописью?

1 Ответ

0 голосов
/ 19 марта 2019

В вашем примере Abc - это имя переменной JavaScript и - имя типа TypeScript, а Bcd - имя переменной JavaScript, но не имя типа TypeScript. Тип Bcd является безымянным типом пересечения из {hello(): void} & React.Component<{}>. Поскольку у типа нет имени, вы не можете ссылаться на него как на тип в другом месте вашего кода TypeScript.

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