Hvorfor lar TypeScript meg bruke en nøkkel som ikke er definert i grensesnittet mitt?
Jeg har denne kodelinjen:
const _quantity = startPaymentFrontend?.products[productSlug]?.invoiceData?.[key2]
Denne her
startPaymentFrontend?.products[productSlug]
er et StartPaymentProduct
export interface StartPaymentProduct {
pricingOptionId?: string
passTypeId?: string
quantity: number
eventTimes?: { [eventTimeId: string]: StartPaymentProductEventTime }
invoiceItems?: { [key: string]: number }
teamSlug: string
}
Selv utviklermiljøet gjenkjenner det:
som ikke har invoiceData - bare invoiceItems.
Hvorfor gir ikke kjøring av yarn build en feil på det?
Dette her er tsconfig.json:
{
"compilerOptions": {
"target": "es5",
"lib": ["dom", "dom.iterable", "esnext"],
"allowJs": true,
"skipLibCheck": true,
"strict": true,
"forceConsistentCasingInFileNames": true,
"noEmit": false,
"esModuleInterop": true,
"module": "esnext",
"moduleResolution": "node",
"resolveJsonModule": true,
"isolatedModules": true,
"jsx": "preserve",
"sourceMap": true,
"importHelpers": true,
"outDir": "./built"
},
"include": ["app/**/*", "index.d.ts", "index2.d.ts"],
"exclude": ["node_modules"]
}
Hvordan kan jeg tvinge TypeScript til å gi en feil i de tilfellene?
Svar #1
Det skyldes mest sannsynlig at skipLibCheck-alternativet er satt. Dette instruerer TS-kompilatoren til å hoppe over typekontroll av deklarasjonsfiler, og til tross for navnet vil det ikke bare hoppe over d.ts-typekontroll i kode som du ikke kan kontrollere (dvs. node_modules), men det hopper i stedet over alle *.d.ts-filer.
