Cela a fonctionné en 3.5.2, mais échoue en 3.6.2.
strict
est désactivé.
Est-ce un bogue dans les typages ou TypeScript?
J'ai ajouté des tests qui ont échoué pour cela ici: https://github.com/DefinitelyTyped/DefinatelyTyped/commit/f036856dfc9a7fd140f378402c102206738ec0a4.
import * as React from 'react';
// Copied from https://github.com/DefinitelyTyped/DefinitelyTyped/blob/5db94ca7fd3570dc23588b404d7bb669a7886a8a/types/react-router/index.d.ts#L146
declare function withRouter<P, C extends React.ComponentType<P>>(
component: C & React.ComponentType<P>,
): unknown;
declare const Component: React.ComponentType<{}>;
/*
Argument of type 'ComponentType<{}>' is not assignable to parameter of type 'ComponentClass<{}, any> | (ComponentClass<{}, any> & FunctionComponent<{}>)'.
Type 'FunctionComponent<{}>' is not assignable to type 'ComponentClass<{}, any> | (ComponentClass<{}, any> & FunctionComponent<{}>)'.
Type 'FunctionComponent<{}>' is not assignable to type 'ComponentClass<{}, any> & FunctionComponent<{}>'.
Type 'FunctionComponent<{}>' is not assignable to type 'ComponentClass<{}, any>'.
Type 'FunctionComponent<{}>' provides no match for the signature 'new (props: {}, context?: any): Component<{}, any, any>'.
*/
withRouter(Component);
Si vous savez comment résoudre le problème, faites plutôt une demande d'extraction.
@types/xxxx
et j'ai rencontré des problèmes.Definitions by:
in index.d.ts
) afin qu'ils puissent répondre.Si vous ne mentionnez pas les auteurs, le problème sera ignoré.
Je n'aurai pas le temps de creuser là-dedans. Je pense que nous devrions simplement supprimer toute utilisation de ComponentType
et utiliser des fonctions simples avec des accessoires explicites en ce qui concerne ref
et children
. ComponentType
a toujours été un peu problématique à cause de l'union. S'il ne créait pas d'erreurs, il produisait de très grandes unions avec d'autres hocs. Les consommateurs de bibliothèques ne devraient de toute façon pas toucher à la statique, donc les perdre ne devrait pas être un problème.
J'ai le même problème. Déjà signalé sur le repo react-router (https://github.com/ReactTraining/react-router/issues/6906) mais a été redirigé vers ici.
Je vois toujours des problèmes même après ce correctif. Le message d'erreur est quelque chose comme
Argument of type '({ myProp, history }: RouteComponentProps<{}, StaticContext, any> & { myProp: boolean; }) => Element' is not assignable to parameter of type 'ComponentType<RouteComponentProps<{}, StaticContext, any>>'.
Type '({ myProp, history }: RouteComponentProps<{}, StaticContext, any> & { myProp: boolean; }) => Element' is not assignable to type 'FunctionComponent<RouteComponentProps<{}, StaticContext, any>>'.
Types of parameters '__0' and 'props' are incompatible.
Type 'PropsWithChildren<RouteComponentProps<{}, StaticContext, any>>' is not assignable to type 'RouteComponentProps<{}, StaticContext, any> & { myProp: boolean; }'.
Property 'myProp' is missing in type 'RouteComponentProps<{}, StaticContext, any> & { children?: ReactNode; }' but required in type '{ myProp: boolean; }'.
avec le composant défini comme
import { RouteComponentProps, withRouter } from "react-router-dom";
interface Props extends RouteComponentProps {
myProp: boolean;
}
const Component = ({ myProp, match }: Props) => null
export default withRouter(Component);
j'utilise
typescript: 3.6.3
@types/react-router: 5.0.4
@ karol-majewski Je suis sur TS 3.6.3 et la dernière version @types/react-router: 5.0.4
est en panne, alors que le retour à l'ancienne est OK.
export function withRouter<P extends RouteComponentProps<any>, C extends React.ComponentType<P>>(
component: C & React.ComponentType<P>,
): React.ComponentClass<Omit<P, keyof RouteComponentProps<any>> & WithRouterProps<C>> & WithRouterStatics<C>;
J'encourage tout le monde à ouvrir de nouveaux numéros. Si nous résolvons votre problème particulier, vous n'avez aucun moyen d'être averti si vous ne commentez que dans un fil de discussion fermé. Le terrain de jeu dactylographié permet désormais de configurer la version ts + config et est capable de télécharger les définitions de type. Inclure un lien dans un nouveau numéro aide beaucoup les responsables. Merci: priez:
Il semble que cela ne lance qu'avec strictFunctionTypes
et j'ai une solution en tête. Nous verrons si cela fonctionne.
@sandersn Pouvons-nous rouvrir ceci puisque le correctif a été annulé ?
IIRC, @ eps1lon a découvert que cela était dû à un bogue TypeScript: https://github.com/microsoft/TypeScript/issues/33490
Le correctif arrivera: https://github.com/microsoft/TypeScript/pull/34607.
Fonctionne bien avec la version nocturne. Lien Playground
dactylographié est une perte de temps, j'ai passé des heures à essayer de résoudre cette erreur stupide et rien, donc si le dactylographie est fait pour vous faciliter la vie, il ne fait certainement pas le travail, plein d'erreurs et de bugs
Ce problème a été résolu dans TS 3.7. Fermeture.
Commentaire le plus utile
Je vois toujours des problèmes même après ce correctif. Le message d'erreur est quelque chose comme
avec le composant défini comme
j'utilise