Ini bekerja di 3.5.2, tetapi gagal di 3.6.2.
strict
mode dinonaktifkan.
Apakah ini bug dalam pengetikan atau TypeScript?
Saya menambahkan tes yang gagal untuk ini di sini: https://github.com/DefinitelyTyped/DefinitelyTyped/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);
Jika Anda tahu cara memperbaiki masalah tersebut, buat permintaan penarikan sebagai gantinya.
@types/xxxx
dan mengalami masalah.Definitions by:
dalam index.d.ts
) sehingga mereka bisa menanggapi.Jika Anda tidak menyebutkan penulisnya, masalah ini akan diabaikan.
Saya tidak akan punya waktu untuk menggali lebih dalam. Saya pikir kita hanya harus menghapus penggunaan ComponentType
dan menggunakan fungsi biasa dengan props eksplisit yang berkaitan dengan ref
dan children
. ComponentType
selalu sedikit bermasalah karena penyatuan. Jika tidak membuat kesalahan, itu menghasilkan persatuan yang sangat besar dengan hocs lainnya. Konsumen perpustakaan seharusnya tidak menyentuh statika, jadi kehilangan itu seharusnya tidak menjadi masalah.
Punya masalah yang sama. Sudah dilaporkan di repo react-router (https://github.com/ReactTraining/react-router/issues/6906) tetapi dialihkan ke sini.
Saya masih mengalami masalah bahkan setelah perbaikan ini. Pesan kesalahan adalah sesuatu seperti
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; }'.
dengan komponen yang didefinisikan sebagai
import { RouteComponentProps, withRouter } from "react-router-dom";
interface Props extends RouteComponentProps {
myProp: boolean;
}
const Component = ({ myProp, match }: Props) => null
export default withRouter(Component);
saya menggunakan
typescript: 3.6.3
@types/react-router: 5.0.4
@ karol-majewski Saya menggunakan TS 3.6.3 dan versi terbaru @types/react-router: 5.0.4
rusak, sementara kembali ke versi sebelumnya tidak masalah.
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>;
Saya mendorong semua orang untuk membuka masalah baru. Jika kami memperbaiki masalah khusus Anda, Anda tidak akan diberi tahu jika Anda hanya berkomentar di utas tertutup. Taman bermain ketikan sekarang memungkinkan konfigurasi ts version + config dan dapat mengunduh definisi jenis. Menyertakan tautan dalam masalah baru sangat membantu pengelola. Terima kasih: berdoa:
Sepertinya ini hanya melempar dengan strictFunctionTypes
dan saya punya solusi dalam pikiran. Kami akan melihat apakah itu berhasil.
@sandersn Bisakah kita membuka kembali ini karena perbaikan dikembalikan ?
IIRC, @ eps1lon menemukan bahwa ini disebabkan oleh bug TypeScript: https://github.com/microsoft/TypeScript/issues/33490
Perbaikan akan masuk: https://github.com/microsoft/TypeScript/pull/34607.
Bekerja dengan baik dengan versi malam. Tautan Playground
typescript adalah buang-buang waktu, saya telah menghabiskan waktu berjam-jam mencoba menyelesaikan kesalahan dan kesalahan bodoh ini, jadi jika skrip dibuat untuk membuat hidup lebih mudah sudah pasti tidak melakukan pekerjaan, penuh kesalahan dan bug
Masalah ini telah diperbaiki di TS 3.7. Penutupan.
Komentar yang paling membantu
Saya masih mengalami masalah bahkan setelah perbaikan ini. Pesan kesalahan adalah sesuatu seperti
dengan komponen yang didefinisikan sebagai
saya menggunakan