[英]Typescript generic function and indexed argument
我有以下package.json
:
{
"name": "browserify-test",
"version": "1.0.0",
"description": "",
"main": "dist/index.js",
"typings": "dist/index.d.ts",
"scripts": {
"build:tsc": "tsc --outDir dist",
"build:browser": "browserify src/index.ts -p tsify --standalone MyLib > dist/myLib.js"
},
"devDependencies": {
"browserify": "^14.0.0",
"tsify": "^3.0.0",
"typescript": "^2.1.5"
}
}
跟随tsconfig.json
:
{
"compilerOptions": {
"noImplicitAny": true,
"module": "commonjs",
"target": "ES5",
"emitDecoratorMetadata": true,
"experimentalDecorators": true,
"sourceMap": true,
"declaration": true
}
}
文件src/evets.d.ts
:
export interface MyEvent {
name: string
}
最后是入口点src/index.js
:
import * as events from './events';
export class MyLibrary {
public test(eventInstance: events.MyEvent) {
console.log(eventInstance);
console.log(events);
}
}
构建纯打字稿版本的作品。 因此,命令npm run build:tsc
可以完美地npm run build:tsc
但是尝试使用browserify进行构建,因此调用npm run build:browser
我得到以下错误:
> browserify-test@1.0.0 build /home/aszmyd/tmp/browserify-test
> browserify src/index.ts -p tsify --standalone MyLib > dist/myLib.js
Error: Cannot find module './events' from '/home/aszmyd/tmp/browserify-test/src'
看来d.ts
无法正确使用扩展名为d.ts
类型定义文件。
上面的示例在两种情况下起作用 :
当在index.ts
时,我是这样import * as events from './events.d;
: import * as events from './events.d;
(注意结尾的.d )
当我删除console.log(events);
行(?!)-如何使用events.***
类型,但不能使用整个集合(别名)?
我认为我在这里缺少一些虚构的东西,但是我缺乏想法。
跑步
import * as events from './events';
尝试导入与导入文件位于同一目录中的名为'events.ts'的打字稿文件。 那是因为这是相对路径。
(导入./events.d
将在同一目录中导入events.d.ts
,解释“为什么”起作用)
要导入外部模块,请使用模块名称(而非路径)来执行import语句。 因此,对于名为“事件”的模块,import语句为
import * as events from 'events'
导入外部模块时,编译器将查找定义文件,以“键入”模块。 根据模块的结构,此文件可以是类似于“ event.d.ts”的内部模块定义,也可以是类似于以下内容的外部模块定义文件:
declare module 'events' {
export interface MyEvent {
name: string
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.