You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Use AuthTokenSection in App (build fails with TS errors)
* package.json: add Nextcloud, Vue, typescipt dependencies
(from Nextcloud)
* remove .ts suffix from import paths (causes build error otherwise)
* add declare global to define Nextcloud types. This should be changed
to @nextcloud/typings.
* annotated import of Nextcloud components (JS) with @ts-expect-error
to solve tsc errors. This is most likely due to missing type
definitions. Unclear how Nextcloud core made this working.
* tsconfig: extend from @vue/tsconfig/tsconfig.json as documented
elsewhere and as done in Nextcloud's core tsconfig.json
* the eslint rule set @nextcloud/eslint-config/typescript was added to
prevent:
ERROR in [eslint]
/app/src/components/AuthTokenSection.vue
35:27 error "@nextcloud/initial-state" is not published n/no-unpublished-import
36:32 error "@nextcloud/l10n" is not published n/no-unpublished-import
I can only assume that that rule is disabled in the rule set we
extend from or that the module resolution "node" can not find the
files.
The error actually complains about the module not being part of
"dependencies" in package.json, which is the case, however.
The internet calls for allowing such modules, which IMO defeats the
purpose.
The rule is also present in Nextcloud's core config.
Build fails with errors like
ERROR in /app/src/components/AuthTokenSetup.vue.ts
47:9-14
[tsl] ERROR in /app/src/components/AuthTokenSetup.vue.ts(47,10)
TS2339: Property 'reset' does not exist on type 'CreateComponentPublicInstance<{}, { authTokenStore: Store<"auth-token", { tokens: IToken[]; }, {}, { updateToken(token: IToken): Promise<any>; addToken(name: string): Promise<ITokenResponse | null>; deleteToken(token: IToken): Promise<...>; wipeToken(token: IToken): Promise<...>; renameToken(token: IToken, newName: ...'.
This hints at Typescript not being able to infer types from the
component definition.
Related issues:
* vuejs/vue#9873
* vuejs/vue#12628
* vuejs/vue#8721
Unsuccessfully attempted proposed solutions:
* Declaring return types on methods like:
reset(): void {
async submit(): Promise<void> {
* Using arrow functions
Did not work and would introduce new errors anyway
* Defining interfaces for the returned component
Caused another rabbit hole of more and more required type
definitions, that should be infered by the Vue typings anyway
0 commit comments