typescript - Hvordan inkludere .d.ts-fil manuelt (lokalt)? Eller hvordan bruke en brukerdefinert .d.ts-fil?
Jeg studerer nuxt.js, og av en eller annen grunn vil jeg utvide Vue-instansen slik:
import Vue from 'vue'
Vue.prototype.$myProp = 'test'
const app = new Vue()
console.log(app.$myProp)
Følger guiden på https://v2.vuejs.org/v2/guide/typescript.html#Augmenting-Types-for-Use-with-Plugins, har jeg opprettet en fil på types/test.d.ts med innholdet nedenfor:
declare module 'vue/types/vue' {
interface Vue {
$myProp: string;
}
}
Men jeg vet ikke hvordan jeg får det til å fungere.
Jeg fikk feil i VSCode. Får også feil når jeg kjører tsc (Versjon 3.7.2):
index.ts:14:17 - error TS2339: Property '$test' does not exist on type 'CombinedVueInstance<Vue, object, object, object, Record<never, any>>'.
14 console.log(app.$test)
Jeg har prøvd å bruke en tsconfig.json i rotkatalogen, men det fungerer ikke:
{
"compilerOptions": {
"typeRoots": [
"types/test.d.ts"
]
}
}
Jeg har også prøvd å sette inn en referanse som dette, men det fungerer ikke:
///<reference path="types/test.d.ts"/>
Selvfølgelig, jeg vil ikke inkludere denne declare-filen i hver fil. Finnes det en måte å aktivere declare i hele prosjektet på?
Jeg vet ikke hvordan VSCode fungerer med TypeScript. Kanskje jeg bare gjør en feil i konfigurasjonsfilen.
Svar #1
typeRoots refererer til kataloger, ikke filer. I tillegg refererer det til den inneholdende mappen til typepakker.
En types-pakke er en mappe med en fil som heter index.d.ts eller en mappe med en package.json som har et types-felt. - typescriptlang.org
Vanligvis er dette ./node_modules/@types-mappen, som også er standardverdien for typeRoots-alternativet.
For ditt tilfelle er det bedre å bruke include-alternativet i stedet for typeRoots.
{
"include": [
"./types",
/* other .ts or .d.ts source code containing folders here */
],
"compilerOptions": { ... }
}
