reactjs - Blir en TypeScript-modulforsterkning automatisk eksportert i et komponentbibliotek?
Jeg laget et komponentbibliotek ved å bruke material-ui og Typescript i bunnen. Jeg har brukt Typescript-modulaugumentasjon for å legge til nye alternativer i temaet, som beskrevet i deres dokumentasjon om tilpassing av tema med Typescript.
// createPalette.d.ts/* eslint-disable @typescript-eslint/no-unused-vars */
import { Palette, PaletteOptions } from "@material-ui/core/styles/createPalette";
declare module "@material-ui/core/styles/createPalette" {
interface Palette {
highlight: PaletteColor;
layout: LayoutPaletteColor;
}
interface PaletteOptions {
highlight: PaletteColorOptions;
layout?: LayoutPaletteColor;
}
interface LayoutPaletteColorOptions {
paper: string;
text: string;
}
interface SidebarPaletteColorOptions extends LayoutPaletteColorOptions {
navItemSelectedBg: string;
navItemSelectedColor: string;
}
interface LayoutPaletteColor {
header: LayoutPaletteColorOptions;
sidebar: SidebarPaletteColorOptions;
footer: LayoutPaletteColorOptions;
}
}
Deretter bygger jeg prosjektet mitt og publiserer det til Github-pakker. Jeg bruker også dette skriptet som kopierer *.d.ts-filene til dist-mappen
"copy-typings": "copyfiles -u 1 \"./src/types/*.d.ts\" dist",Når jeg installerer pakken i et annet prosjekt og refererer til Headeren, for eksempel, får jeg denne feilen
Kan ikke lese egenskapen 'header' av undefined som peker på linjen der theme.palette.layout.header.paper refereres.
Dette får meg til å tro at min createPalette.d.ts kun er effektiv på komponentbiblioteket selv, men ikke når komponentene brukes i et annet prosjekt.
Hvordan eksportere denne modulutvidelsen? Eller hvordan få dette til å fungere?
Svar #1
Jeg tror jeg har funnet en løsning på problemet ditt.
Kort fortalt
- Du bør inkludere dine
d.ts-filer eller den inneholdende mappen ipackage.json
...
files: [
"dist",
"src/types" or "src/types/global.d.ts"
]
...
- Spesifiser globale typer i din
tsconfig.json
"types": ["node", "@YOUR_PACKAGE_NAME/src/types"]
Som standard inkluderer TS globale definisjonsfiler fra @types-mapper. "types"-egenskapen forteller den å inkludere noen bestemte d.ts-filer fra andre mapper. Jeg vet ikke nøyaktig hvordan det fungerer, men dette løste nøyaktig det samme problemet i prosjektet mitt.
Min forklaring er veldig dårlig, men jeg håper du vil få en idé) Håper det hjelper
