问题标签 [typescript-class]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
47 浏览

javascript - Typescript:将类数组的类型转换为构造类数组的类型

有一个问题我一直在努力解决。

我有一个函数,里面放了两个参数:

  • - 类数组
  • mapper - 采用这些类的实例数组的函数。

想象一下这样的功能:

我如何为此创建一个打字稿声明,以确保映射器将始终接受实例的数组。

示例用法:

所以我认为应该可以检查映射器是否访问了正确的值。

我的工作方式有点像:

但是在这种情况下,错误仅显示在classes参数上,而不是mapper

那么有什么办法可以扭转这种行为呢?
……

我会感谢任何想法。

祝你今天过得愉快。

0 投票
0 回答
30 浏览

typescript - 使用“这个”。在 NestJS 方法装饰器参数中(例如 @Mutation(() => this.signupService.Response),以及关于静态方法的问题

我在使用Nx的 monorepo 设置中使用NestJs,NextJs 作为客户端。我的基本架构是拥有包含特定域(身份验证、用户、帖子等)的所有逻辑(客户端、服务器和 api 代码)的模块,然后拥有这些模块使用的服务(CssService、DbService、JwtService、ValidationService 等) . 文件夹结构看起来像这样(我已经为这个演示删除了不必要的桶/Nx lib 文件):

在我的 NestJs 身份验证解析器 (modules/auth/server/auth.resolver) 中,我导入 SignupServerService 以供注册处理程序使用:

这是注册服务器服务:

但是,这有几个问题,我有一些相关的问题:

  1. 该代码有效,但我在我的 resolver 中得到了这行的几个 TS 错误,如果我直接从文件中@Args('input') input: SignupServerService.Input使用它就会消失,而不是通过类静态访问它。错误是和SignupInputsignup.input.tsSignupServerService'SignupServerService' only refers to a type, but is being used as a namespace here.ts(2702)Parameter 'input' of public method from exported class has or is using private name 'SignupServerService'.ts(4073)

  2. 支持问题 1,我在 上使用了一些静态属性,SignupServerService因此我可以传递SignupServerService.Response@Mutation装饰器 args,因为以下内容不起作用@Mutation(() => this.signupServerService.Response)。我想知道为什么这不起作用?我使用静态方法将属性传递给装饰器参数的模式是最好的方法吗?我应该使用 TS 命名空间而不是静态类方法还是有更好的方法来处理这个?

  3. 此外,我听说静态方法会导致单元测试出现问题,应该避免吗?NestJs 文档的日志记录部分提到了这一点,但还不足以得出任何结论:“这种技术虽然简单,但并未对 MyLogger 类使用依赖注入。这可能会带来一些挑战,尤其是对于测试,并限制 MyLogger 的可重用性”

  4. 这让我想到了一个关于在 monorepo 中使用 NestJs 的更普遍的问题。我经常需要在一些 NestJs 代码和一些 React 代码之间共享一个类/服务(例如我的自定义 JwtService - 注意,这不是 NestJs 内置的 JwtService)。自然,功能性反应组件不使用 DI 系统,因此要访问 JwtService 上的属性,我需要将它们设为静态(例如JwtService.ACCESS_TOKEN_COOKIE_NAME),这意味着在 JwtService 类中复制属性(例如static ACCESS_TOKEN_COOKIE_NAME = ACCESS_TOKEN_COOKIE_NAME; ACCESS_TOKEN_COOKIE_NAME = ACCESS_TOKEN_COOKIE_NAME),或者不要使用静态方法并在我的反应代码中手动实例化服务(例如const { ACCESS_TOKEN_COOKIE_NAME } = new JwtService())。但是,如果服务具有我必须手动提供给类构造函数参数的依赖项,则这将变得不可用,特别是如果依赖项仅由 NestJs 代码中使用的方法使用(例如const { ACCESS_TOKEN_COOKIE_NAME } = new JwtService(new SomeDependencyNotNeededForReact()))。那么在这种情况下最好的解决方案是什么?

0 投票
0 回答
41 浏览

typescript - Typescript:将静态对象动态分配给 super 的类实例并生成正确的类型定义文件

将 javascript 代码迁移到 typescript 时面临生成类型的问题。也许我错过了一些微不足道的东西。嵌入了打字稿操场代码。

打字稿游乐场

以下是文件结构。

当为此代码生成类型时,会找到以下内容。

但是代码被用作etp.reports.getReports('1234')生成的类型是不可能的。

我想实现以下生成的类型

我尝试过将索引签名与 Generic 一起使用,这是不允许的。试图创建 mixins,但在概念上迷失了方向。

0 投票
2 回答
22 浏览

typescript - 如何覆盖具有不兼容类型的基类的属性?

我在一些我无法修改的第三方库中有这个声明的类:

我想以这种方式自定义它,使用从该声明扩展的新类:

我显然收到类型属性不兼容的错误:

属性“eventName”的类型不兼容。

如何为可以修改类型的声明类定义新的接口/eventName类型?