javascript - Varför klagar typescript på att ett objekts nyckel är odefinierad även om det föregående kommandot sätter ett värde till den nyckeln?
type MaybeThereIsAValue = {
[p: string]: string | undefined
}
...
let bar: MaybeThereIsAValue = {};
const key = "carpe";
bar[key] = "diem";
const why = bar[key];
// why is string | undefined
Varför är why string | undefined eftersom jag bokstavligen tilldelar ett värde till bar[key] på raden innan ?
Hur kan jag undvika det?
Kolla exempel här
Svar #1
Jag förstod varför det skulle få det.
Det beror på att strictNullChecks i tsconfig är inställt på true, vilket som standard är false,
och const key='carpe' körs först efter att TS har kompilerats till JS, så TS vet inte vilken nyckel det är.
strictNullChecks: Vid typkontroll, ta hänsyn till null och undefined.
Så om du vill lösa det, är mina två lösningar:
1. ställ in strictNullChecks i tsconfig till false
2. Använd ! icke-null påståenden operator
const why = bar[key]!;
Låt oss tänka på denna situation:
let key = 'carpe';
bar[key] = 'diem';
// the next line would only be executed after the TS is compiled into JS.
key = 'test';
// that is to say TS does not know the key is 'test' or 'carpe'
// so `why` is type of string or undefined
const why = bar[key];
Om du sätter strictNullChecks till false, kommer why alltid att vara av typen string
