nuxt auth - Typescript: Overskriv ejendomstype fra bibliotek - fik fejl Efterfølgende ejendomsdeklarationer skal have samme type
Jeg vil tilsidesætte ejendomstypen fra bibliotekserklæringen, jeg forsøger at tilsidesætte ved hjælp af interface, men jeg får fejlen Subsequent property declarations must have the same type. Hvordan skal jeg gøre for at løse dette problem?
// this is library declaration
declare class Auth {
user: Record<string, string | number> | null
// i want to remove null type in user property, because i dont want to use `non-null assertion` in line 21
// i cant change this file because it is 3rd party library
}
// ------------------------------
// our file
// my override interface, but fail
interface Auth {
user: Record<string, string | number>
}
const a: Auth = {
user: {
name: 'joko',
age: 30
}
}
const userName = a.user!.name
// const userName = a.user.name // <-- i want use like this, because i'm sure that this property is always available
Jeg har forsøgt at tilsidesætte bibliotekserklæring ved hjælp af en grænseflade, men det mislykkedes. Mit forventede resultat er, at typen kan tilsidesættes uden at røre ved eller ændre biblioteket, kun ved at bruge vores kode.
Svar #1
Jeg har løst det selv. I mit tilfælde vil jeg overskrive Auth interfacet i nuxt-auth modulet. Her er løsningen:
- Dupliker modultyper fra node_modules til vores typefil. Ændr derefter det relevante interface (ændr
AuthtilIAuth).IAuther vores modificerede interface.
import { IAuth } from '~/interface/auth/model';
export * from '@nuxtjs/auth-next/dist';
declare module 'vue/types/vue' {
interface Vue {
$auth: IAuth;
}
}
// rest of the file
- Tilføj filen ovenfor som
pathsitsconfig.json, så TypeScript vil bruge den fil i stedet for de oprindelige moduletype.
"compilerOptions": {
// ...
"paths": {
"@nuxtjs/auth-next": [
"types/nuxt-auth.d.ts"
],
// ...
}
// ...
}
Voila, typen køres som forventet ved hjælp af vores modificerede interface
