nuxt auth - Typescript: Överskrid egenskapstyp från biblioteket - fick fel Subsequent property declarations must have the same type
Jag vill skriva över egenskapstypen från bibliotekets deklaration, jag försöker skriva över med hjälp av ett gränssnitt men jag får fel Subsequent property declarations must have the same type. Hur ska jag göra för att lösa detta 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
Jag har försökt att åsidosätta bibliotekets deklaration med hjälp av ett gränssnitt men det misslyckades. Mitt förväntade resultat är att typen kan åsidosättas utan att röra eller ändra biblioteket, endast genom att använda vår egen kod.
Svar #1
Jag har löst det själv. I mitt fall vill jag åsidosätta Auth-gränssnittet i nuxt-auth-modulen. Här är lösningen:
- Duplicera modultyper från node_modules till vår typfil. Ändra sedan lämpligt gränssnitt (ändra
AuthtillIAuth).IAuthär vårt modifierade gränssnitt.
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
- Lägg till filen ovan som
pathsitsconfig.json, så att TypeScript kommer att använda den filen istället för de ursprungliga modultyperna.
"compilerOptions": {
// ...
"paths": {
"@nuxtjs/auth-next": [
"types/nuxt-auth.d.ts"
],
// ...
}
// ...
}
Voila, typen körs som förväntat med vårt modifierade gränssnitt
