reactjs - hur man lägger till typdeklaration i ett React-Typescript-projekt med CRA
Jag har skapat ett React TypeScript-projekt med CRA med kommandot yarn create react-app my-app --typescript
nu har jag en modul foo installerad som inte har någon typning varken som standard eller i definitelytyped-förrådet.
d.v.s. i en komponent, jag har
import {bar} from 'foo';
vilket ger fel Typfel: Kunde inte hitta en deklarationsfil för modul 'foo'. '/*/node_modules/foo/dist/entry.js' har implicit typen 'any'.
Jag skapade foo.d.ts i types-mappen i projektets rot som
declare module 'foo'{ import * as React from 'react' }
bara för att ha foo som typen any men ändå få samma fel. det verkar som att oavsett vilken kompilator (webpack, annan transpiler) inte hittar deklarationen i types-mappen
hur kan jag lägga till en anpassad typdeklaration till projektet?
Svar #1
Här är ett verkligt användningsfallsexempel. Jag lyckades integrera kendo-ui-core i CRA+Typescript.
Problemet var att det inte finns några typsnitt för kendo-ui-core, nämligen att typsnitten har ett annat namn: @types/kendo-ui
Typescript klagade över att det saknades typdefinitioner
För att lösa problemet, skapa en fil som heter kendo-ui-core.d.ts i din /src-katalog med följande innehåll:
// src/kendo-ui-core.d.ts
declare module 'kendo-ui-core' {
import * as KendoTypings from '@types/kendo-ui';
export = KendoTypings;
}
Svar #2
Det här fungerar:
/* create src/CustomTypes.ts */
namespace MyCustomType {
export type foo = number;
}
export default MyCustomType;
använd så här:
import MyCustomType from "src/CustomTypes";
const num: MyCustomType.foo = 123;
