在定义文件(* d.ts)中导入类

MichałLytek

我想扩展Express Session类型以允许在会话存储中使用我的自定义数据。我有一个对象req.session.user,它是我的类的一个实例User

export class User {
    public login: string;
    public hashedPassword: string;

    constructor(login?: string, password?: string) {
        this.login = login || "" ;
        this.hashedPassword = password ? UserHelper.hashPassword(password) : "";
    }
}

所以我创建了我的own.d.ts文件以将定义与现有的快速会话类型合并:

import { User } from "./models/user";

declare module Express {
    export interface Session {
        user: User;
    }
}

但这根本不起作用-VS Code和tsc看不到它。所以我用简单的类型创建了测试定义:

declare module Express {
    export interface Session {
        test: string;
    }
}

并且测试字段可以正常工作,因此导致导入问题。

我还尝试添加/// <reference path='models/user.ts'/>导入,但tsc却没有看到User类-如何在* d.ts文件中使用我自己的类?

编辑:我将tsc设置为在编译时生成定义文件,现在我有了user.d.ts:

export declare class User {
    login: string;
    hashedPassword: string;
    constructor();
    constructor(login: string, password: string);
}

以及用于扩展Express Sesion的自定义文件:

import { User } from "./models/user";
declare module Express {
    export interface Session {
        user: User;
        uuid: string;
    }
}

但是当import语句放在最上面时仍然无法正常工作。有任何想法吗?

MichałLytek

经过两年的TypeScript开发,我终于设法解决了这个问题。

基本上,TypeScript有两种类型的模块类型声明:“本地”(普通模块)和环境(全局)。第二种允许编写与现有模块声明合并的全局模块声明。这些文件之间有什么区别?

d.ts仅当文件没有任何导入时,它们才被视为环境模块声明。如果提供了导入行,则现在将其视为普通模块文件,而不是全局文件,因此无法扩展模块定义。

因此,这就是我们在此讨论的所有解决方案都不起作用的原因。但幸运的是,自TS 2.9起,我们可以使用以下import()语法将类型导入全局模块声明中

declare namespace Express {
  interface Request {
    user: import("./user").User;
  }
}

因此,这条线import("./user").User;起到了神奇作用,现在一切正常:)

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在TypeScript声明中导入JSON文件(* .d.ts文件)

来自分类Dev

如何在d.ts文件中导入类型(从另一个文件)而不将其转换为模块?

来自分类Dev

在CakePHP中导入自定义类

来自分类Dev

导入的类未出现在d.ts文件中

来自分类Dev

在Python文件Pycharm中导入Cython类

来自分类Dev

在Eclipse中导入类/ Java文件

来自分类Dev

为什么必须在定义的类中导入嵌套类?

来自分类Dev

在d3.js中导入json文件

来自分类Dev

在Scala REPL中导入自定义Java类

来自分类Dev

在未定义的 JavaScript 对象中导入类时出错

来自分类Dev

打字稿:es6从node_modules子文件夹导入类型定义(.d.ts)

来自分类Dev

TypeScript-构建.d.ts定义文件-嵌套函数。

来自分类Dev

.d.ts文件中的自定义类型

来自分类Dev

TypeScript-构建.d.ts定义文件-嵌套函数。

来自分类Dev

在jsp文件中导入Java类时出错

来自分类Dev

不能在NetBeans中导入jar文件类

来自分类Dev

无法从Angular2的node-modules文件夹中导入ts文件

来自分类Dev

在jar文件中导入bean定义时出错

来自分类Dev

在 Selenium 中导入文件

来自分类Dev

定义自定义types.d.ts不能解决导入js库的问题

来自分类Dev

在 Nuxt.js 框架中导入 CSV 文件以供 D3 处理

来自分类Dev

如何从D中的其他源文件导入类?

来自分类Dev

如何从D中的其他源文件导入类?

来自分类Dev

如何在控制器Laravel中导入自定义类?

来自分类Dev

在jrxml中导入自定义类并使用Maven插件进行编译

来自分类Dev

如何在同一包中导入__init__.py内部定义的类?

来自分类Dev

如何在Python自定义类中导入外部库

来自分类Dev

TypeScript生成的定义文件(.d.ts)无法与package.json类型一起使用

来自分类Dev

使用fluent / chaining API的JS库的打字稿定义文件(.d.ts)

Related 相关文章

  1. 1

    在TypeScript声明中导入JSON文件(* .d.ts文件)

  2. 2

    如何在d.ts文件中导入类型(从另一个文件)而不将其转换为模块?

  3. 3

    在CakePHP中导入自定义类

  4. 4

    导入的类未出现在d.ts文件中

  5. 5

    在Python文件Pycharm中导入Cython类

  6. 6

    在Eclipse中导入类/ Java文件

  7. 7

    为什么必须在定义的类中导入嵌套类?

  8. 8

    在d3.js中导入json文件

  9. 9

    在Scala REPL中导入自定义Java类

  10. 10

    在未定义的 JavaScript 对象中导入类时出错

  11. 11

    打字稿:es6从node_modules子文件夹导入类型定义(.d.ts)

  12. 12

    TypeScript-构建.d.ts定义文件-嵌套函数。

  13. 13

    .d.ts文件中的自定义类型

  14. 14

    TypeScript-构建.d.ts定义文件-嵌套函数。

  15. 15

    在jsp文件中导入Java类时出错

  16. 16

    不能在NetBeans中导入jar文件类

  17. 17

    无法从Angular2的node-modules文件夹中导入ts文件

  18. 18

    在jar文件中导入bean定义时出错

  19. 19

    在 Selenium 中导入文件

  20. 20

    定义自定义types.d.ts不能解决导入js库的问题

  21. 21

    在 Nuxt.js 框架中导入 CSV 文件以供 D3 处理

  22. 22

    如何从D中的其他源文件导入类?

  23. 23

    如何从D中的其他源文件导入类?

  24. 24

    如何在控制器Laravel中导入自定义类?

  25. 25

    在jrxml中导入自定义类并使用Maven插件进行编译

  26. 26

    如何在同一包中导入__init__.py内部定义的类?

  27. 27

    如何在Python自定义类中导入外部库

  28. 28

    TypeScript生成的定义文件(.d.ts)无法与package.json类型一起使用

  29. 29

    使用fluent / chaining API的JS库的打字稿定义文件(.d.ts)

热门标签

归档