2016-11-21 5 views
4

Я просто не могу обернуть голову вокруг этого, я думаю, я пробовал, наверное, полдюжины раз и всегда прибегаю к any ... Есть ли законный способ начать с HTML-элементом, обернуть это в компоненте и обернуть его в другом компоненте, чтобы HTML-реквизит проходил через все? По сути настраивать элемент HTML? Например, что-то вроде:Расширение HTML-элементов в React и TypeScript при сохранении реквизита

interface MyButtonProps extends React.HTMLProps<HTMLButtonElement> {} 
class MyButton extends React.Component<MyButtonProps, {}> { 
    render() { 
     return <button/>; 
    } 
} 

interface MyAwesomeButtonProps extends MyButtonProps {} 
class MyAwesomeButton extends React.Component<MyAwesomeButtonProps, {}> { 
    render() { 
     return <MyButton/>; 
    } 
} 

Использование:

<MyAwesomeButton onClick={...}/> 

Всякий раз, когда я пытаюсь такого рода композиции, я получаю сообщение об ошибке, подобное:

свойство 'исх' обув является не присваивается целевому свойству.

+0

Вы ищете компоненты высокого порядка (фабрики компонентов). Проверьте их онлайн и посмотрите, подходит ли это тому, о чем вы просите. Они по сути являются «фабриками компонентов», которые позволят вам обернуть компонент в другой компонент, который возвращает этот исходный компонент, но с новыми или модифицированными реквизитами. – ZekeDroid

+0

Является ли время компиляции ошибки (когда вы скомпилируете)? Потому что я попытался скомпилировать ваш код с помощью команды 'tsc' и отлично работает. Я попытался отобразить ' console.log ('Clicked')} />' – Leone

+0

Одна вещь, которую я заметил, это то, что вы не должны передавать реквизиты в свой собственный (HTML) элемент как '

ответ

3

Вы можете изменить определение компонента, чтобы позволить реагировать кнопка HTML реквизита

class MyButton extends React.Component<MyButtonProps & React.HTMLProps<HTMLButtonElement>, {}> { 
    render() { 
     return <button {...this.props}/>; 
    } 
} 

Это покажет машинописи компилятор, который вы хотите, чтобы ввести кнопку реквизита вместе с «MyButtonProps»