关于这个主题有很多问题和答案,但我似乎找不到最新的答案。
我想使用node_modules中本地安装的模块hyperscript
。它没有d.ts文件。
我可以创建一个,我相信应该是这样的:
declare module 'hyperscript' {
export default function H(...a: any[]) : HTMLElement;
}
我把它放在src / typings / hyperscript.d.ts中,这些打字稿似乎已经找到了。
我的ts源文件有:
import H from 'hyperscript';
const element = H('h1', "This is a title");
我编译&捆绑:
browserify --debug src/main.ts -p [ tsify --noImplicitAny ] > js/bundle.js
这一切顺利,但是当我尝试在浏览器中运行时,我得到:
Uncaught TypeError: hyperscript_1.default is not a function
我很确定hyperscript只输出一个默认函数,因为在带有babel / browserify的普通JS中,我使用:
import H from 'hyperscript';
它运作正常。
我的package.json看起来像:
{
"name": "hyperscript-example-ts",
"version": "1.0.0",
"description": "hyperscript typescript example",
"author": "Me",
"license": "MIT",
"private": true,
"dependencies": {
"hyperscript": "latest"
},
"devDependencies": {
"browserify": "latest",
"tsify": "latest",
"uglifyjs": "latest"
},
"scripts": {
"build": "browserify --debug src/main.ts -p [ tsify --noImplicitAny ] > js/bundle.js"
}
}
我的tsconfig.json:
{
"compilerOptions": {
"target": "es5",
"module": "commonjs",
"moduleResolution": "node",
"allowJs": true,
"declaration": false,
"noImplicitAny": true,
"removeComments": false,
"noLib": false,
"preserveConstEnums": true,
"suppressImplicitAnyIndexErrors": true,
"outDir": "js",
"sourceMap": true,
"watch": false
},
"filesGlob": [
"src/**/*.ts",
"src/typings/**/*.d.ts",
"!./node_modules/**/*.ts"
],
"atom": {
"rewriteTsconfig": false
}
}
任何帮助都非常感谢!
编辑:在此更多地删除它,看起来这样做的唯一方法是重新编写我的导入:
/// <reference path="./typings/hyperscript.d.ts" />
import _H = require('hyperscript'); // Gets no type info from my d.ts file
const H: (...a: any[]) => HTMLElement = _H as any;
TypeScript手册说我应该可以使用第三方JS node_modules的标准导入语法。引自this page:
/// <reference path="node.d.ts"/>
import * as URL from "url";
let myUrl = URL.parse("http://www.typescriptlang.org");
答案 0 :(得分:1)
声明文件基本上是试图将环境世界解释为TypeScript(more)
的开发人员在您的情况下声明:
declare module 'hyperscript' {
export default function H(...a: any[]) : HTMLElement;
}
实际上是错的。函数H
不是默认导出。它是的主要出口。所以你真正想要的是:
declare module 'hyperscript' {
export = function H(...a: any[]) : HTMLElement;
}