javascript - Bruke Typescript-funksjoner i et vanlig VueJS-prosjekt
TL;DR: Hvordan kan jeg importere og bruke en TypeScript-modul i mine vanlige JS Vue-komponenter?
Jeg har et Vue 2 (ikke enda 3) prosjekt. I dette prosjektet har jeg flyttet noe logikk til ES-moduler for bedre testbarhet og for å gjøre dem mer gjenbrukbare. Noe sånt som dette:
export const getHistory = () => {
// ...
}
I en vanlig JS Vue-komponent ville jeg da import {getHistory} from '../modules/listHistory' den funksjonen og bruke den i kombinasjon med noe presentasjonslogikk.
Nå vil jeg flytte denne funksjonen til en TypeScript-modul som dette:
interface ListHistory {
id: number;
}
export function getHistory(): ListHistory[] {
// ...
}
Jeg antok (naivt) at jeg bare kunne fortsette å importere funksjonen og bruke den på samme måte som før i mine JS-komponenter. Dette fungerer imidlertid ikke og mislykkes med denne feilmeldingen:
These relative modules were not found:
* ../../modules/listHistory in ./node_modules/cache-loader/dist/cjs.js??ref--12-0!./node_modules/babel-loader/lib!./node_modules/cache-loader/dist/cjs.js??ref--0-0!./node_modules/vue-loader/lib??vue-loader-options!./src/components/quick-actions/quick-actions.vue?vue&type=script&lang=js&
I følge Vue-retningslinjene for TypeScript har jeg lagt til en tsconfig.json-fil i prosjektet mitt:
{
"compilerOptions": {
"target": "es5",
"strict": true,
"module": "es2015",
"moduleResolution": "node"
},
"include": [
"src/**/*.ts"
],
"exclude": [
"node_modules"
]
}
Jeg har også lagt til typescript som en utviklingsavhengighet i prosjektet mitt.
Mens jeg lette etter en løsning, kunne jeg bare finne folk som prøvde å importere plain-js-moduler i TypeScript-prosjekter, ingenting som det jeg vil gjøre.
Jeg vet at importering av Typescript-ting inn i vanlig JS-kode ikke gir deg alle fordelene med Typescript, men siden jeg på et tidspunkt vil migrere hele greia til VueJS 3 og jeg ønsker å bruke typer, er det bedre å starte nå med å flytte ting som allerede kan flyttes til Typescript.
Svar #1
Å installere TS og legge til tsconfig.json-konfigurasjonsfilen i et Vue-prosjekt basert på Vue CLI/Webpack er ikke nok, da du også må konfigurere Webpack for å korrekt håndtere TS-filer eller <script lang='ts'>-blokker i Vue SFC-er (ved å bruke ts-loader)
Den enkleste måten å begynne å bruke TS i et prosjekt administrert av Vue CLI er å bruke CLI-pluginen @vue/cli-plugin-typescript
vue add typescript
