В следующем Машинопись площадка пример Я попытался обобщить функциональный компонент Element
в GenericElement
компонент, но TypeScript жалуется на синтаксис.
Как правильно ввести общий компонент функции реакции в TypeScript, используя подход определения типа React.FC
?
import React from 'react';
type PropsType = {
id: string,
value: string,
};
type GenericPropsType<keyType> = {
id: keyType,
value: string,
};
const Element: React.FC<PropsType> = ({id, value}) => {
return <div>{id.toString()}={value}</div>;
};
const GenericElement: React.FC<GenericPropsType<keyType>> = <keyType = string>({id, value}) => {
return <div>{id.toString()}={value}</div>;
};
Type 'Element' is not assignable to type 'FC<GenericPropsType<any>>'.
Type 'Element' provides no match for the signature '(props: PropsWithChildren<GenericPropsType<any>>, context?: any): ReactElement<any, any> | null'.
Cannot find name 'keyType'.
Property 'keyType' does not exist on type 'JSX.IntrinsicElements'.
Cannot find name 'id'.
Left side of comma operator is unused and has no side effects.
Cannot find name 'value'.
Cannot find name 'id'.
Cannot find name 'value'.
Identifier expected.
Unexpected token. Did you mean `{'>'}` or `>`?
Expression expected.
Unexpected token. Did you mean `{'}'}` or `}`?
JSX element 'keyType' has no corresponding closing tag.
'</' expected.
'Element' is declared but its value is never read.
React.FC
. typescriptlang.org/play?#code/ - person Aleksey L.   schedule 06.05.2021<keyType extends { toString(): string } = string>
. Не могли бы вы подробнее рассказать о{ toString(): string }
? - person doberkofler   schedule 06.05.2021extends { toString(): string }
- это ограничение параметра универсального типа, поэтому предоставленный тип должен иметьtoString
метод (вы делаетеid.toString()
внутри функции). Что касается стрелочной функции: если вы используетеReact.FC
, вы не можете оставить параметр универсального типа открытым (предоставляется потребителем) - person Aleksey L.   schedule 06.05.2021id: string | number
? - person Aleksey L.   schedule 07.05.2021