angular - fel TS2304: Kan inte hitta namnet 'InputEvent'


Som beskrivs i Does TypeScript have type definitions for InputEvent?, försökte jag använda @types/dom-inputevent för att få InputEvent i mitt Angular 7-projekt. Men det visar error TS2304: Cannot find name 'InputEvent' varje gång jag använder det.

Finns det något behov av att "registrera" det i Angular-projektet eller är det ett fel?

Om en lösning inte är tillgänglig, vill jag bara ha ett bekvämt sätt att uppnå samma resultat som event.data i InputEvent.

Tack!

Svar #1

Jag hade samma problem när jag försökte använda @types/dom-inputevent i enhetstester för en Angular 6-app. I mitt fall berodde det på att jag hade en uttrycklig 'types'-post i min tsconfig.spec.js, som beskrivs nedan.

tsconfig.json (irrelevanta delar utelämnade)

{
  "compilerOptions": {
     "typeRoots": [
       "node_modules/@types"
     ]
  }
}

tsconfig.spec.js (irrelevanta delar utelämnade)

{
  "extends": "../tsconfig.json",
  "compilerOptions": {
  "types": [
    "jasmine",
    "node"
  ]
}

Som du kan se finns det en types-post som listar specifika typer som ska vara tillgängliga under kompilering. Detta åsidosätter typeRoots-inställningen i den överordnade tsconfig.json, så endast @types/jasmine och @types/node var tillgängliga när jag kompilerade mina enhetstester. Se även här: https://www.typescriptlang.org/docs/handbook/tsconfig-json.html#types-typeroots-and-types.

Lösning är att lägga till dom-inputevent i types-listan t.ex.

{
  "extends": "../tsconfig.json",
  "compilerOptions": {
  "types": [
    "jasmine",
    "node",
    "dom-inputevent"
  ]
}

Ett annat tillvägagångssätt hade varit att ta bort typen-posten helt och hållet. Om jag gjorde det, skulle typeRoots ha aktiverats och letat efter alla typer under node_modules/@types, och därmed även inkluderat @types/dom-inputevent.

Relaterade artiklar