Ako nastaviť @types vo Visual Studio 2015 Update 3 s TypeScript 2.1


Všetko, čo sa týka TS 2.x @types, vyzerá úžasne, ale za nič na svete neprídem na to, ako to správne funguje!

  • Mám nainštalovaný Visual Studio 2015 - verzia 14.0.25431.01 Update 3
  • Mám nainštalovaný TypeScript 2.1.4 pre Visual Studio 2015, ktorý som získal odtiaľto
  • Projekt VS Web bol nastavený na použitie TypeScript 2.1 s <TypeScriptToolsVersion>2.1</TypeScriptToolsVersion>

Tu je relevantná časť z môjho súboru packages.json

  "dependencies": {
    "angular": "^1.5.9",
    "angular-messages": "^1.5.9",
    "angular-ui-bootstrap": "^2.3.0",
    "angular-ui-router": "^0.3.2",
    "moment": "^2.17.0",
    "underscore": "^1.8.3"
  },
  "devDependencies": {
    "@types/angular": "^1.5.21",
    "@types/angular-ui-bootstrap": "^0.13.36",
    "@types/angular-ui-router": "^1.1.35",
    "@types/jquery": "^2.0.34",
    "@types/node": "^0.0.3",
    "@types/signalr": "^2.2.32",
    "@types/underscore": "^1.7.36"
 }

A tu je celý môj súbor tsconfig.json

{
  "compilerOptions": {
    "module": "commonjs",
    "noImplicitAny": true,
    "removeComments": true,
    "sourceMap": true,
    "target": "ES5"
  },
  "typeAcquisition": {
    "enable": true
  }
}

Tiež som skúšal rôzne varianty s typeRoots a types určenými (jedno, druhé, obe, ani jedno) v rámci compilerOptions, ale bez úspechu!

    "typeRoots": [
      "./node_modules/@types"
    ],
    "types": [
      "angular",
      "angular-ui-bootstrap",
      "angular-ui-router",
      "jquery",
      "moment",
      "signalr",
      "underscore"
    ]

Vyčistil som zostavenie, reštartoval Visual Studio atď., ale bez ohľadu na to, čo urobím, stále dostávam chyby zostavenia ako

some-file.ts(8,22): error TS2304: Build:Cannot find name 'angular'.
some-file.ts(12,41): error TS2694: Build:Namespace 'angular' has no exported member 'IScope'.
some-file.ts(12,67): error TS2694: Build:Namespace 'angular' has no exported member 'IRootElementService'.
another-file.ts(26,22): error TS2503: Build:Cannot find namespace 'moment'.
another-file.ts(47,37): error TS2304: Build:Cannot find name 'moment'.

Všetky typedefy existujú na disku buď v node_modules/@types alebo spolu s príslušným balíkom. Nemám predstavu, prečo Visual Studio/TypeScript tieto súbory nemôže nájsť! Mám pocit, že niečo buď nebolo ešte pripravené na vydanie, alebo mi uniká niečo veľmi jednoduché. Prosím, niekto mi ukážte správny smer.

Odpoveď č. 1

Ak ste to ešte nevyriešili, skúste odinštalovať nástroje TypeScript cez Programy na odinštalovanie/inštaláciu (môžete mať viacero verzií ako ja) a znova nainštalovať nástroje TypeScript vo verzii 2.1.4 pomocou inštalačného balíka, ktorý už máte. Dvojito skontrolujte vo Visual Studio, že používate túto verziu (detaily by mali byť v 'O Microsoft Visual Studio' v ponuke Pomocník).

Tu je môj tsconfig, ak to pomôže:

{
  "compilerOptions": {
    "target": "es5",
    "module": "system",
    "moduleResolution": "node",
    "sourceMap": true,
    "emitDecoratorMetadata": true,
    "experimentalDecorators": true,
    "removeComments": false,
    "noImplicitAny": false,
    "typeRoots": [
      "node_modules/@types"
    ]
  },
  "typeAcquisition": {
    "enable": true
  },
  "exclude": [
    "jspm_packages"
  ]
}

Toto funguje pre akékoľvek typy, ktoré exportujú modul, ale stále som mal problémy pri importe jednotlivých typov, keď nie sú modulmi (teda len rozhrania atď.)...

Všeobecne som nemusel robiť žiadne import * from x príkazy pre knižnice a vedel som jednoducho používať názov modulov exportovaných priamo.

Súvisiace články