繁体   English   中英

Typescript泛型函数和索引参数

[英]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类型定义文件。


上面的示例在两种情况下起作用

  1. 当在index.ts时,我是这样import * as events from './events.d;import * as events from './events.d; (注意结尾的.d

  2. 当我删除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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM