рдпрд╣ 3.5.2 рдореЗрдВ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди 3.6.2 рдореЗрдВ рд╡рд┐рдлрд▓ рд░рд╣рддрд╛ рд╣реИред
strict
рдореЛрдб рдЕрдХреНрд╖рдо рд╣реИред
рдХреНрдпрд╛ рдпрд╣ рдЯрд╛рдЗрдкрд┐рдВрдЧ рдпрд╛ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдмрдЧ рд╣реИ?
рдореИрдВрдиреЗ рдпрд╣рд╛рдВ рдЗрд╕рдХреЗ рд▓рд┐рдП рдЕрд╕рдлрд▓ рдкрд░реАрдХреНрд╖рдг рдЬреЛрдбрд╝реЗ: https://github.com/DefinitelyTyped/DefinitelyTyped/commit/f036856dfc9a7fd140f378402c102206767ec0a4ред
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 рдореИрдВ рдЯреАрдПрд╕ 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 рдиреЗ рдкрд╛рдпрд╛ рдХрд┐ рдпрд╣ рдПрдХ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдмрдЧ рдХреЗ рдХрд╛рд░рдг рд╣реИ: https://github.com/microsoft/TypeScript/issues/33490
рдлрд┐рдХреНрд╕ рдореЗрдВ рдЖрдПрдЧрд╛: https://github.com/microsoft/TypeScript/pull/34607
рд░рд╛рдд рдХреЗ рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд╕рд╛рде рдареАрдХ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдЦреЗрд▓ рдХрд╛ рдореИрджрд╛рди рд▓рд┐рдВрдХ
рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕рдордп рдХреА рдмрд░реНрдмрд╛рджреА рд╣реИ, рдореИрдВрдиреЗ рдЗрд╕ рдореВрд░реНрдЦрддрд╛рдкреВрд░реНрдг рддреНрд░реБрдЯрд┐ рдФрд░ рдиреЛрдЯрд┐рдВрд╕ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдШрдВрдЯреЛрдВ рдмрд┐рддрд╛рдП рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдпрджрд┐ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдЬреАрд╡рди рдХреЛ рдЖрд╕рд╛рди рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ, рддреЛ рдпрд╣ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдХрд╛рдо рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реИ, рддреНрд░реБрдЯрд┐рдпреЛрдВ рдФрд░ рдмрдЧреЛрдВ рд╕реЗ рднрд░рд╛ рд╣реИред
рдпрд╣ рдореБрджреНрджрд╛ рдЯреАрдПрд╕ 3.7 рдореЗрдВ рддрдп рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рд╕рдорд╛рдкрдиред
рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА
рдореИрдВ рдЗрд╕ рдлрд┐рдХреНрд╕ рдХреЗ рдмрд╛рдж рднреА рдореБрджреНрджреЛрдВ рдХреЛ рджреЗрдЦ рд░рд╣рд╛ рд╣реВрдВред рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рд╣реИ
рдШрдЯрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ
рдореИрдВ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдБ