- Liittynyt
- 07.03.2017
- Viestejä
- 1 976
Itse käytän React opiskelussani typescriptiä, mutta ajattelin että sen sijaan että kyselisin typescript keskeisiä juttuja react -keskustelussa, olisi typescriptille pyhitetty keskustelu parempi paikka.
Ongelma. React-router esimerkin toimimaan saaminen typescriptillä ilman olennaisia muutoksia. Alkuperäinen React Router: Declarative Routing for React
Oma versioni
Virhe tulee seuraavasta rivistä
ja valitusvirsi on
App.tsx(50, 47) viittaa tuohon PrivateRoute jälkimmäiseen komponentti -Tyyppiin
Jos taas katsoo miten tuo React-routerin Route on määritelty, joka ottaa vastaan komponentin, niin se on
Editti. Seuraava ei kuulukkaan tähän. Vain Route määritys
Mutta sovellukseen se on importoitu
Ja tuo BrowserRouter on määritelty
Joten miten tuota PrivateRoute funktiota pitäisi oikein ruveta määrittelemään/esittelemään tässä tapauksessa?
Huom. Editoitu.
Ongelma. React-router esimerkin toimimaan saaminen typescriptillä ilman olennaisia muutoksia. Alkuperäinen React Router: Declarative Routing for React
Koodi:
function PrivateRoute({ component: Component, ...rest })
Oma versioni
Koodi:
function PrivateRoute( {component, ...rest}: {component:Component}) : JSX.Element {
return (
<h3>{ component }</h3>);
}
function Public(): JSX.Element {
return <h3>Public</h3>;
}
function Protected() {
return <h3>Protected</h3>;
}
Virhe tulee seuraavasta rivistä
Koodi:
<PrivateRoute path="/protected" component={Protected} />
Koodi:
Type '() => Element' is missing the following properties from type 'Component<{}, {}, any>': context, setState, forceUpdate, render, and 3 more.ts(2740)
App.tsx(50, 47): The expected type comes from property 'component' which is declared here on type 'IntrinsicAttributes & { component: Component<{}, {}, any>; }'
Jos taas katsoo miten tuo React-routerin Route on määritelty, joka ottaa vastaan komponentin, niin se on
Koodi:
export interface RouteProps {
location?: H.Location;
component?: React.ComponentType<RouteComponentProps<any>> | React.ComponentType<any>;
render?: ((props: RouteComponentProps<any>) => React.ReactNode);
children?: ((props: RouteChildrenProps<any>) => React.ReactNode) | React.ReactNode;
path?: string | string[];
exact?: boolean;
sensitive?: boolean;
strict?: boolean;
}
export class Route<T extends RouteProps = RouteProps> extends React.Component<T, any> { }
Editti. Seuraava ei kuulukkaan tähän. Vain Route määritys
Koodi:
import {
BrowserRouter as Router,
Koodi:
export interface BrowserRouterProps {
basename?: string;
getUserConfirmation?: ((message: string, callback: (ok: boolean) => void) => void);
forceRefresh?: boolean;
keyLength?: number;
}
export class BrowserRouter extends React.Component<BrowserRouterProps, any> {}
Joten miten tuota PrivateRoute funktiota pitäisi oikein ruveta määrittelemään/esittelemään tässä tapauksessa?
Huom. Editoitu.
Viimeksi muokattu: