javascript - Tip predloška literala: Prekoračen maksimalni kapacitet pozivnog stoga
Dobivam sljedeću pogrešku:
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)
Imam sljedeće u global.d.ts:
declare type UserId = `${number}`;
declare interface DevEnvironment {
dev?: {
user?: {
userId?: UserId;
}
}
}
U gornjem sučelju, ako promijenim userId?: UserId u userId?: string, tada gornja pogreška nestaje. Mislim da je to zbog ovog buga s template literalom.
Međutim, gore navedeno koristim ovako; ovdje gradim svoju datoteku okruženja u svom razvojnom okruženju:
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);
Zatim ga koristim u jednoj usluzi:
@Injectable({ providedIn: 'root' })
export class User {
get userId(): UserId {
const defaultValue = (environment.dev?.user?.userId || '000000000') as UserId;
}
}
Znam da je rečeno da je problem riješen u novijim verzijama TypeScript-a, ali smo zaglavljeni s 4.1.5 zbog korištenja Angular 11 CLI-ja kao što se vidi ovdje:
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
Postoji li nešto što mogu učiniti da upotrijebim sintaksu koju sam prvotno želio koristiti?
Odgovor #1
Ako koristiš TypeScript niži od verzije 4, dobit ćeš ovu pogrešku, nadogradi na najnoviju verziju i opusti se))
Odgovor #2
Ovo je interna Typescript greška, za mene je proizvodnja radila, ali razvoj nije.
Ažurirajte TypeScript kao što je predloženo, čak i ako izlaz nije potpuno isti, problem je isti.
Nemam pojma koja verzija zapravo radi, završio sam s 4.x.x i čudom radi kako se očekivalo.