javascript - Malliteraltype: Maksimal anropsstakkstørrelse overskredet
Jeg får følgende feil:
ERROR in RangeError: Maximum call stack size exceeded
at getResolvedBaseConstraint (/project/node_modules/typescript/lib/typescript.js:53262:43)
at getBaseConstraintOfType (/project/node_modules/typescript/lib/typescript.js:53242:34)
at getTypeFacts (/project/node_modules/typescript/lib/typescript.js:62711:37)
at getTypeFacts (/project/node_modules/typescript/lib/typescript.js:62711:24)
at getTypeFacts (/project/node_modules/typescript/lib/typescript.js:62711:24)
at getTypeFacts (/project/node_modules/typescript/lib/typescript.js:62711:24)
at getTypeFacts (/project/node_modules/typescript/lib/typescript.js:62711:24)
at getTypeFacts (/project/node_modules/typescript/lib/typescript.js:62711:24)
at getTypeFacts (/project/node_modules/typescript/lib/typescript.js:62711:24)
at getTypeFacts (/project/node_modules/typescript/lib/typescript.js:62711:24)
at getTypeFacts (/project/node_modules/typescript/lib/typescript.js:62711:24)
at getTypeFacts (/project/node_modules/typescript/lib/typescript.js:62711:24)
at getTypeFacts (/project/node_modules/typescript/lib/typescript.js:62711:24)
at getTypeFacts (/project/node_modules/typescript/lib/typescript.js:62711:24)
at getTypeFacts (/project/node_modules/typescript/lib/typescript.js:62711:24)
at getTypeFacts (/project/node_modules/typescript/lib/typescript.js:62711:24)
Jeg har følgende i global.d.ts:
declare type UserId = `${number}`;
declare interface DevEnvironment {
dev?: {
user?: {
userId?: UserId;
}
}
}
I det ovenstående grensesnittet, hvis jeg endrer userId?: UserId til userId?: string, forsvinner feilen ovenfor. Jeg tror det er på grunn av denne mal-litteralfeilen.
Men jeg bruker det ovenfor på denne måten; her bygger jeg miljøfilen min i utviklingsmiljøet mitt:
let dev = {};
try {
// The below file may or may not exists depending on the environment
dev = require('./environment.local').dev;
} catch (e) { }
export const environment = Object.assign({}, {
// Main environment variables
}, {dev: dev || {}} as DevEnvironment);
Jeg bruker det deretter i en tjeneste:
@Injectable({ providedIn: 'root' })
export class User {
get userId(): UserId {
const defaultValue = (environment.dev?.user?.userId || '000000000') as UserId;
}
}
Jeg vet at problemet skal ha blitt løst i nyere versjoner av TypeScript, men vi sitter fast med 4.1.5 på grunn av bruk av Angular 11 CLI, som vist her:
npm i typescript@^4.2.0
npm ERR! code ERESOLVE
npm ERR! ERESOLVE unable to resolve dependency tree
npm ERR!
npm ERR! Found: @angular/[email
npm ERR! node_modules/@angular/compiler-cli
npm ERR! dev @angular/compiler-cli@"^11.2.11" from the root project
npm ERR!
npm ERR! Could not resolve dependency:
npm ERR! peer @angular/compiler-cli@"^10.0.0" from @angular-devkit/[email
npm ERR! node_modules/@angular-devkit/build-angular
npm ERR! @angular-devkit/build-angular@">=0.1000.0 < 0.1100.0" from @angular-builders/[email
npm ERR! node_modules/@angular-builders/custom-webpack
npm ERR! dev @angular-builders/custom-webpack@"^10.0.1" from the root project
npm ERR! dev @angular-devkit/build-angular@"^0.1002.3" from the root project
npm ERR!
npm ERR! Fix the upstream dependency conflict, or retry
npm ERR! this command with --force, or --legacy-peer-deps
npm ERR! to accept an incorrect (and potentially broken) dependency resolution.
npm ERR!
npm ERR! See /Users/rnaddy/.npm/eresolve-report.txt for a full report.
npm ERR! A complete log of this run can be found in:
npm ERR! /Users/rnaddy/.npm/_logs/2021-07-08T15_28_45_346Z-debug.log
Er det noe jeg kan gjøre for å bruke syntaksen jeg opprinnelig ønsket å bruke?
Svar #1
Hvis du bruker TypeScript lavere enn 4, får du denne feilen, oppgrader til den nyeste og slapp av))
Svar #2
Dette er en intern Typescript-feil, for meg fungerte produksjon, men ikke utvikling.
Oppdater TypeScript som foreslått, selv om det ikke er helt samme resultat, er det samme problemet.
Jeg har ingen anelse om hvilken versjon som faktisk fungerer, jeg endte opp med 4.x.x og det fungerer magisk som forventet.