打字稿泛型函数和索引参数
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
工作得很好但是试图用 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'
browserify 似乎无法正确使用扩展名为 d.ts
的类型定义文件。
上面的例子WORKS有两种情况:
当在 index.ts
中时,我这样导入:import * as events from './events.d;
(注意结尾 .d)
当我删除 console.log(events);
行时 (?!) - 它如何使用 events.***
类型但不能使用整个集合(别名)?
我想我在这里遗漏了一些虚拟的东西,但我缺乏想法。
运行
import * as events from './events';
尝试导入一个名为 'events.ts' 的打字稿文件,该文件位于与导入文件相同的目录中。那是因为它是一个相对路径。
(导入./events.d
会在同一目录下导入events.d.ts
,解释为什么"it works")
要导入外部模块,导入语句是使用模块名称(而不是路径)进行的。因此,对于名为 'events' 的模块,导入语句将是
import * as events from 'events'
导入外部模块时,编译器会寻找定义文件,"typing"模块。根据模块的结构,此文件可能是内部模块定义,看起来像 'event.d.ts' 或外部模块定义文件,更可能看起来像
declare module 'events' {
export interface MyEvent {
name: string
}
}
我关注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
工作得很好但是试图用 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'
browserify 似乎无法正确使用扩展名为 d.ts
的类型定义文件。
上面的例子WORKS有两种情况:
当在
index.ts
中时,我这样导入:import * as events from './events.d;
(注意结尾 .d)当我删除
console.log(events);
行时 (?!) - 它如何使用events.***
类型但不能使用整个集合(别名)?
我想我在这里遗漏了一些虚拟的东西,但我缺乏想法。
运行
import * as events from './events';
尝试导入一个名为 'events.ts' 的打字稿文件,该文件位于与导入文件相同的目录中。那是因为它是一个相对路径。
(导入./events.d
会在同一目录下导入events.d.ts
,解释为什么"it works")
要导入外部模块,导入语句是使用模块名称(而不是路径)进行的。因此,对于名为 'events' 的模块,导入语句将是
import * as events from 'events'
导入外部模块时,编译器会寻找定义文件,"typing"模块。根据模块的结构,此文件可能是内部模块定义,看起来像 'event.d.ts' 或外部模块定义文件,更可能看起来像
declare module 'events' {
export interface MyEvent {
name: string
}
}