В моем коде JS я импортирую модуль следующим образом:
const toolbox = require('../toolbox')
/**
* @param {toolbox.Hammer} hammer
*/
function useHammer(hammer) {
let nail = new toolbox.Nail()
hammer.ham(nail)
}
Теперь, потому что мой файл tools/index.d.ts
экспортирует toolbox
как пространство имен. Моя IDE может видеть, что hammer
имеет метод ham
. Потрясающие! Но он не видит, что в toolbox
есть член Nail
.
Я попытался поместить теги @module
и @export
в toolbox/index.js
, но безрезультатно. Я также попытался поместить @type {toolbox}
поверх оператора require
, но мне сказали, что toolbox is referenced directly or indirectly in its own type annotation
.
Как я могу сообщить своей IDE, что toolbox = require('toolbox')
делает toolbox
соответствующим моему namespace?
Пример toolbox/index.js
и toolbox/index.d.ts
для справки:
exports.Hammer = class {
ham (nail) {
if (Math.random() > 0.1) {
exports.nailCount -= 1
return 'bang!'
} else return 'Ouch my thumb!'
}
}
exports.nailCount = 100
exports.Nail = class {}
export = toolbox
export as namespace toolbox
declare namespace toolbox {
class Nail {}
class Hammer {
ham(n: Nail) : string
}
}
и мой tsconfig для хорошей меры (так как это маленькая машина go -культура)
{
"compilerOptions": {
"allowJs": true,
"target": "es5",
"checkJs": true,
"baseUrl": "../",
"moduleResolution": "node",
"noEmit": true
}
}