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.

Relaterte artikler