问题标签 [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 投票
2 回答
508 浏览

typescript - 打字稿类对象存储到firebase db

我定义了一个打字稿类,如下所示:

字段被设为私有并使用 getter 和 setter 访问。这很好用,除了当我将对象存储到 firebase db 时,它将它与 _ 一起存储

这会破坏我的整体代码,因为当我下次渲染它时,我的属性名称现在从名称更改为 _name。

有没有一种方法,当我将这个对象持久保存到 firebase 时,它​​会在没有 _ 的情况下存储它

请指教

0 投票
2 回答
1052 浏览

typescript - TypeScript:通过提供类体创建通用匿名类

标题可能具有误导性,但我真的不知道如何表达我的问题。

我想提供一个泛型类(或只是类体)作为函数参数。然后提供的类应该推断出它的泛型。

用法:

作为一个(丑陋的)“解决方法”,我找到了一种方法来分别提供所有类方法,然后从中构建一个类。像这样的东西:

但这真的很丑。

基本上我真的只想为build方法提供类体。然后这个方法将从它创建一个类,调用wrap并返回。

有没有办法做到这一点?

编辑:另一个尝试解释我的问题:

目前我必须使用这样的代码:

如您所见,我必须指定AbstractClass. 我不想指定类型,因为builder已经知道类型。

我只想提供类的主体而不再次指定泛型类型。像这样的东西:

或这个:

0 投票
3 回答
905 浏览

typescript - 如何在共享类和 Angular 2 组件之间传输数据?

我正在使用独立的 TypeScript 类调用我的后端服务。console.log在实例化我的共享类的实例时,我能够捕获数据。但是,我无法在我的角度组件中访问该类的本地属性和方法。

这是我的组件:

这是我的共享类模块:

如你看到的,

我想projects在我的 ng 组件中使用this.service.getAllProjects(). 当我尝试记录来自共享类ProjectService的响应时,函数响应是undefined.

当我在使用初始化类之后console.log进入ProjectService构造函数时,new我可以看到我的类能够捕获响应。

为什么要这样做?另外,我该如何解决?

多谢你们。

0 投票
3 回答
6824 浏览

typescript - 使用 TypeScript 装饰器扩展 ES6 类时扩展类型

我正在尝试用装饰器(a-la-angular样式)装饰一个类,并向其添加方法和属性。

这是我的示例装饰类:

这是装饰器:

myProp不是 Person 的已知属性:

如何装饰打字稿类并保留类型完成、类型安全等?

0 投票
1 回答
1958 浏览

node.js - TypeScript:使用类型化装饰器函数装饰派生类

我正在尝试使用 TypeScript 为 node.js 和 MongoDB 构建一个类似于“实体框架”的 ORM 库。

使用这个库,消费者将能够定义一个Person扩展Base类的模型类(例如),并且类装饰器将向 Person 类添加额外的数据(例如,instances数组,它将包含模型的所有实例,collection_name这将是模型的 MongoDB 集合名称等)。

TypeScript 游乐场中的代码。


所以我的第一步是创建一个Base类:

所以用户将能够像这样定义他的模型:

然后我创建了一个装饰器类来设置Person 类的collection_name和属性:instances

装饰器函数接收用户生成的Class,我正在尝试创建一个接口来描述此类的类型。我叫它IClass

  • new是构造函数(返回一个Base实例)
  • instances并且collection_name是静态属性Base<T>并且在这里是非静态的(我不确定,对吗?)

但是,在尝试定义用户模型时,出现以下错误:

错误:(23, 2) TS2345:“typeof Person”类型的参数不可分配给“IClass>”类型的参数。

“typeof Person”类型中缺少属性“instances”,但“typeof Person”类型缺少“IClass>”类型中所需类型的以下属性。

似乎打字稿编译器Base在检查typeof Person.

如何定义装饰器函数的 Class 属性的类型?

0 投票
1 回答
435 浏览

typescript - 在函数类型的成员变量中有多个函数签名

为什么“处理程序”函数变量不可能有多个签名?

以这个理想但无效的代码片段为例:

我真正想要的是类似的东西:是一个事件处理程序或一个需要词法绑定handleThing的承诺主体(箭头函数是实现这一点的最简单方法)。其目的是维护多个签名,以便可以根据上下文(即取决于使用它的位置)选择最合适的一个。thenthishandleThing

我也尝试了以下方法,但处理程序变量最终具有 type any,即所有类型都被有效地删除了:

仅有handleThing: <T extends object>(a: T | undefined) => object | undefined并不理想:

  1. 它并没有像我需要的那样映射到实际函数的签名,即当我的输入不是类似 null 时,我的返回类型肯定也不为 null;和
  2. 我在类中定义的其他一些方法期望提供和接收非空对象,因此上面键入的处理程序函数不适用于每个承诺或事件处理程序。

一种选择是使用async函数并取消处理函数变量,但这将违背我的团队为我遇到这种困境的项目建立的既定代码约定。

因此,我问:

  1. 有没有更好的方法来实现我在 TypeScript 的处理函数变量中保持类型安全的目标?
  2. 有人知道为什么第一个片段不起作用吗?
  3. 第一个片段是否有可能有一天会起作用(即路线图中的联合函数签名选择)?
0 投票
1 回答
407 浏览

typescript - 在 Typescript 的泛型类中初始化泛型类型

我想使用泛型类型在泛型类中初始化一个泛型类变量,但我不知道是否有办法做到这一点。

使用类型初始化工作正常,但它似乎不适用于泛型。

我收到以下错误Type '{}' is not assignable to type 'ListenerList<K, I, O, V>'。有没有办法做到这一点?

0 投票
2 回答
55 浏览

typescript - 将泛型值推送到 Typescript 中泛型类中的泛型列表

我正在尝试将通用对象推送到通用类中的通用对象列表中。

这可能只是语义上的问题,但我不确定我在这里做错了什么。

如果我定义类型,它可以工作,但感觉不是解决问题的好方法:

我得到的错误如下Property 'push' does not exist on type 'ListenerList<K, I, O, V>[K]'

0 投票
1 回答
106 浏览

typescript - 使用嵌套类方法创建 API (Typescript)

我正在尝试创建一个包装 REST api 的打字稿类,并且我想将各种方法组织到子对象中以更好地表达代码。有什么方法这样做并且仍然通过方法中的“this”保持对类实例的访问?

例如考虑以下类:

我想组织上述方法,以便我能够像这样调用它们:

0 投票
1 回答
19 浏览

typescript - 类型索引意外工作并引发无法解释的错误

以下代码对我来说似乎很奇怪......

如果我将索引签名设置为string,那么只有字符串应该能够索引它吗?与符号相同。但是,数字能够索引[k: string],我收到一个错误,说symbol不能用作索引签名。