2017-01-13 1 views
1

Я использую typescript 2.1 вместе с JSX, и я пытаюсь использовать отображаемый тип Partial для расширения интерфейса реагирующего компонента с дополнительными свойствами из интерфейса с требуемыми свойствами.интерфейс может распространяться только на класс или другой интерфейс/отображаемые типы

это интерфейс с требуемыми свойствами:

interface ActionsCreators { 
    A: string; 
    B: string; 
}; 

это интерфейс, который я хочу продлить:

interface Props extends React.Props<any> { 
    C: string; 
}; 

это отображенный тип:

type ActionsCreatorsPartial = Partial<ActionsCreators>; 

которые дают этот результат :

type ActionsCreatorsPartial = { 
    A?: string; 
    B?: string; 
} 

это то, что я пытаюсь сделать:

interface Props extends React.Props<any>, ActionsCreatorsPartial { 
    C: string; 
}; 

но я вижу ошибку компиляции: «интерфейс может только расширить класс или другой интерфейс» Как я могу подключить интерфейс Props с ActionsCreatorsPartial типа?

+2

Обход проблемы: 'Тип Реквизит = Реагирует.Props & ActionsCreatorsPartial & {C: string; }; ' –

+0

Я думаю, что ваш комментарий заслуживает ответа –

ответ

2

Сообщение об ошибке правильное, интерфейсы могут расширять только другие интерфейсы или интерфейс класса, а классы также могут реализовывать только интерфейсы или использовать интерфейс из другого класса.

Существует утвержденное suggestion, чтобы классы реализовали псевдонимы типов, я полагаю, что в сферу действия также можно было бы позволить интерфейсам расширять псевдонимы типов, если они реализованы.

К сожалению, на сегодняшний день я не думаю, что есть какой-либо способ включить отображаемый тип в интерфейс.

+0

на теоретической стороне Мне нравится ваш ответ, но с практическим комментарием от Дэвида Шеррета, что мне нужно :) Я все равно отвечу на ваш ответ. –

+0

@RajabShakiro Спасибо, но вы только попросили, как сделать интерфейс, я понятия не имел, что тип пересечения будет соответствовать вашим потребностям. Если вы более подробно расскажете о том, что вы/пытались выполнить, возможно, вы могли бы получить еще лучшие ответы здесь – Alex