svaga referenser - Hur använder man WeakRef i Typescript?
Jag vill använda WeakRef i Typescript. Jag försökte använda den senaste tillgängliga versionen för tillfället (4.1.5). Jag har ett kompileringsfel:
const toIdString = (o: Object): string =>
o.constructor.name + JSON.stringify(o);
export class MemoCache {
static handle<T>(o: T): T {
const id = toIdString(o);
const cached = MemoCache.map.get(id);
if (cached) {
return cached.deref() as T;
}
MemoCache.map.set(id, new WeakRef(o));
return o;
}
static map = new Map<string, WeakRef>();
}
Jag har kompileringsfel.
src/Memoizer.ts:11:31 - error TS2304: Cannot find name 'WeakRef'.
11 MemoCache.map.set(id, new WeakRef(o));
~~~~~~~
src/Memoizer.ts:15:32 - error TS2304: Cannot find name 'WeakRef'.
15 static map = new Map<string, WeakRef>();
~~~~~~~
Men detta är ECMAScript 2021. Chrome 88 verkar förstå det. Jag har node 15.8.0 (den senaste). Har du någon idé om hur man får Typescript att förstå WeakRef?
Svar #1
Den 18 februari 2021, för att kunna använda WeakRef i TypeScript, behöver du ha och konfigurera tsconfig.json genom att lägga till ESNext i lib-egenskapen.
{
"compilerOptions": {
// ...
"lib": ["ESNext"],
// ...
},
// ...
}
Svar #2
Ett mer nyanserat alternativ är att uttryckligen inkludera ES2021.WeakRef i tsconfig.json lib.
{
"compilerOptions": {
"lib": ["ES2020", "ES2021.WeakRef"],
// ...
},
// ...
}
Notera:
ES2020är lib-inställningen för Node 14.ES2021är lib-inställningen för Node 16.ES2022är lib-inställningen för Node 18.
Se: tsconfig/bases: Värdar TSConfigs att utöka i en TypeScript-app, anpassad till en viss körningsmiljö
