Это работало в 3.5.2, но не работает в 3.6.2.
strict
режим отключен.
Это ошибка типизации или TypeScript?
Я добавил сюда неудачные тесты: https://github.com/DefinitiTyped/DefinitiTyped/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);
Если вы знаете, как решить проблему, сделайте запрос на перенос.
@types/xxxx
, и у меня возникли проблемы.Definitions by:
в index.d.ts
), чтобы они могли реагировать.Если вы не укажете авторов, то вопрос будет проигнорирован.
У меня не будет времени вникать в это. Я думаю, нам следует просто удалить любое использование ComponentType
и использовать простые функции с явными реквизитами в отношении ref
и children
. ComponentType
всегда было немного проблематично из-за объединения. Если он не создавал ошибок, он создавал очень большие связи с другими узлами. Пользователи библиотеки в любом случае не должны касаться статики, поэтому их потеря не должна быть проблемой.
Получил ту же проблему. Уже сообщалось о репозитории реактивного маршрутизатора (https://github.com/ReactTraining/react-router/issues/6906), но было перенаправлено сюда.
Я все еще вижу проблемы даже после этого исправления. Сообщение об ошибке выглядит примерно так
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; }'.
с компонентом, определенным как
import { RouteComponentProps, withRouter } from "react-router-dom";
interface Props extends RouteComponentProps {
myProp: boolean;
}
const Component = ({ myProp, match }: Props) => null
export default withRouter(Component);
я использую
typescript: 3.6.3
@types/react-router: 5.0.4
@ karol-majewski Я использую TS 3.6.3, и последняя версия @types/react-router: 5.0.4
ломается, а возврат к прежней версии - в порядке.
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>;
Я призываю всех открывать новые вопросы. Если мы исправим вашу конкретную проблему, вы не сможете получать уведомления, если вы комментируете только в закрытой цепочке. Игровая площадка машинописного текста теперь позволяет настраивать ts версия + конфигурация и может загружать определения типов. Включение ссылки в новый выпуск очень помогает разработчикам. Спасибо: молитесь:
Похоже, это бросает только с strictFunctionTypes
и у меня есть решение. Посмотрим, получится ли.
@sandersn Можем ли мы снова открыть это, поскольку исправление было отменено ?
IIRC, @ eps1lon обнаружил, что это связано с ошибкой TypeScript: https://github.com/microsoft/TypeScript/issues/33490
Придет исправление: https://github.com/microsoft/TypeScript/pull/34607.
Прекрасно работает с ночной версией. Ссылка на игровую площадку
Машинопись - пустая трата времени, я потратил часы, пытаясь решить эту глупую ошибку и ничего подобного, поэтому, если машинописный текст сделан, чтобы облегчить жизнь, он определенно не выполняет свою работу, полон ошибок и ошибок
Эта проблема была исправлена в TS 3.7. Закрытие.
Самый полезный комментарий
Я все еще вижу проблемы даже после этого исправления. Сообщение об ошибке выглядит примерно так
с компонентом, определенным как
я использую