2017-08-16 2 views
0

J'ai un module tiers ("handsontable"), dont la définition est obsolète dans le dossier du module ("/ node_modules/handsontable/handsontable.d.ts "), mais correct" index.d.ts "dans/node_modules/@ types dossier. Ainsi, la structure est la suivante:Conflit de typescript entre "module/index.d.ts" et "@ types/module/index.d.ts"

/node_modules 
    /@types 
    /handsontable 
     /index.d.ts (LATEST) 
    /handsontable 
    /handsontable.d.ts (OUTDATED) 
/src/app.ts 

J'utilise des modules ES6 et je ne veux pas exposer handsontable au global, alors quand j'écris app.ts:

import ht from 'handsontable' 

let options: ht.Options 

Il montre me erreur, car ht.Options n'existe pas dans /node_modules/handsontable/handsontable.d.ts, alors qu'il existe seulement dans /node_modules/@types/handsontable/index.d.ts

y at-il de toute façon de forcer tapuscrit à charger des informations de type de /node_modules/@type/module pendant import m from "module"?

Voici mon tsconfig.json:

{ 
    "exclude": [ 
     "node_modules","build","dist", "typings","types" 
    ], 

    "include": [ 
     "./src/**/*.ts" 
    ], 

    "typeAcquisition": { 
     "enable": true 
     // "exclude": [ //tried that too 
     //  "handsontable" 
     // ] 
    }, 
    "compileOnSave": true, 
    "compilerOptions": { 
     "baseUrl": "node_modules", 
     "paths": { 
      "src/*":["../src/*"], 
      "app/*":["../src/*"], 
      "*":["../src/*", "./node_modules"] 
     }, 
     "target": "es2016", 
     //"module": "es6", //es6 is not compatible with webpack.config.ts 
     "moduleResolution": "node", 
     "allowSyntheticDefaultImports": true, 
     "sourceMap": true, 
     "allowJs": true, 
     "outDir": "./build", 
     "experimentalDecorators": true, 
     "lib": [ 
      "dom", 
      "es6" 
     ] 
    } 
} 

version Tapuscrit: 2.4.2

+0

qu'avez-vous dans votre 'tsconfig' fichier? – Nayish

+0

juste mis à jour la question avec l'info –

+0

Tout d'abord, vous devez supprimer les types des fichiers exclus. Ensuite, vous devez ajouter le type de handsontable et enfin vous devez exclure le type problamatic. – Nayish

Répondre

0

Comme mentionné dans le commentaire "node_modules/{module}/{module}.d.ts" prend toujours la priorité sur "node_modules/@types/{module}/index.d.ts"

Donc, le meilleur solution de contournement que je pourrais trouver jusqu'à présent est de cartographier le tsconfig.json/compilationOptions/chemins:

{ 
    compilationOptions:{ 
     baseUrl:"node_modules", 
     paths:{ 
     "handsontable":["@types/handsontable"] 
     } 
    }  
} 

Ce qui m'a aidé à trouver, est le drapeau tsc --traceResolutions