问题标签 [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.
typescript - 打字稿类对象存储到firebase db
我定义了一个打字稿类,如下所示:
字段被设为私有并使用 getter 和 setter 访问。这很好用,除了当我将对象存储到 firebase db 时,它将它与 _ 一起存储
这会破坏我的整体代码,因为当我下次渲染它时,我的属性名称现在从名称更改为 _name。
有没有一种方法,当我将这个对象持久保存到 firebase 时,它会在没有 _ 的情况下存储它
请指教
typescript - TypeScript:通过提供类体创建通用匿名类
标题可能具有误导性,但我真的不知道如何表达我的问题。
我想提供一个泛型类(或只是类体)作为函数参数。然后提供的类应该推断出它的泛型。
用法:
作为一个(丑陋的)“解决方法”,我找到了一种方法来分别提供所有类方法,然后从中构建一个类。像这样的东西:
但这真的很丑。
基本上我真的只想为build
方法提供类体。然后这个方法将从它创建一个类,调用wrap
并返回。
有没有办法做到这一点?
编辑:另一个尝试解释我的问题:
目前我必须使用这样的代码:
如您所见,我必须指定AbstractClass
. 我不想指定类型,因为builder
已经知道类型。
我只想提供类的主体而不再次指定泛型类型。像这样的东西:
或这个:
typescript - 如何在共享类和 Angular 2 组件之间传输数据?
我正在使用独立的 TypeScript 类调用我的后端服务。console.log
在实例化我的共享类的实例时,我能够捕获数据。但是,我无法在我的角度组件中访问该类的本地属性和方法。
这是我的组件:
这是我的共享类模块:
如你看到的,
我想projects
在我的 ng 组件中使用this.service.getAllProjects()
. 当我尝试记录来自共享类ProjectService
的响应时,函数响应是undefined
.
当我在使用初始化类之后console.log
进入ProjectService
构造函数时,new
我可以看到我的类能够捕获响应。
为什么要这样做?另外,我该如何解决?
多谢你们。
typescript - 使用 TypeScript 装饰器扩展 ES6 类时扩展类型
我正在尝试用装饰器(a-la-angular样式)装饰一个类,并向其添加方法和属性。
这是我的示例装饰类:
这是装饰器:
但myProp
不是 Person 的已知属性:
如何装饰打字稿类并保留类型完成、类型安全等?
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 属性的类型?
typescript - 在函数类型的成员变量中有多个函数签名
为什么“处理程序”函数变量不可能有多个签名?
以这个理想但无效的代码片段为例:
我真正想要的是类似的东西:是一个事件处理程序或一个需要词法绑定handleThing
的承诺主体(箭头函数是实现这一点的最简单方法)。其目的是维护多个签名,以便可以根据上下文(即取决于使用它的位置)选择最合适的一个。then
this
handleThing
我也尝试了以下方法,但处理程序变量最终具有 type any
,即所有类型都被有效地删除了:
仅有handleThing: <T extends object>(a: T | undefined) => object | undefined
并不理想:
- 它并没有像我需要的那样映射到实际函数的签名,即当我的输入不是类似 null 时,我的返回类型肯定也不为 null;和
- 我在类中定义的其他一些方法期望提供和接收非空对象,因此上面键入的处理程序函数不适用于每个承诺或事件处理程序。
一种选择是使用async
函数并取消处理函数变量,但这将违背我的团队为我遇到这种困境的项目建立的既定代码约定。
因此,我问:
- 有没有更好的方法来实现我在 TypeScript 的处理函数变量中保持类型安全的目标?
- 有人知道为什么第一个片段不起作用吗?
- 第一个片段是否有可能有一天会起作用(即路线图中的联合函数签名选择)?
typescript - 在 Typescript 的泛型类中初始化泛型类型
我想使用泛型类型在泛型类中初始化一个泛型类变量,但我不知道是否有办法做到这一点。
使用类型初始化工作正常,但它似乎不适用于泛型。
我收到以下错误Type '{}' is not assignable to type 'ListenerList<K, I, O, V>'
。有没有办法做到这一点?
typescript - 将泛型值推送到 Typescript 中泛型类中的泛型列表
我正在尝试将通用对象推送到通用类中的通用对象列表中。
这可能只是语义上的问题,但我不确定我在这里做错了什么。
如果我定义类型,它可以工作,但感觉不是解决问题的好方法:
我得到的错误如下Property 'push' does not exist on type 'ListenerList<K, I, O, V>[K]'
:
typescript - 使用嵌套类方法创建 API (Typescript)
我正在尝试创建一个包装 REST api 的打字稿类,并且我想将各种方法组织到子对象中以更好地表达代码。有什么方法这样做并且仍然通过方法中的“this”保持对类实例的访问?
例如考虑以下类:
我想组织上述方法,以便我能够像这样调用它们:
typescript - 类型索引意外工作并引发无法解释的错误
以下代码对我来说似乎很奇怪......
如果我将索引签名设置为string
,那么只有字符串应该能够索引它吗?与符号相同。但是,数字能够索引[k: string]
,我收到一个错误,说symbol
不能用作索引签名。