typescript-generics - 如何在 TypeScript 中实现类?
问题描述
你能帮我创建类 'MyClass' 类 M 应该是 Newable 并实现 IMyInterface
export interface IMyInterface<A>
{
SomeData : A;
}
export class MyClass<T,M inherits IMyInterface<T> and new() >
{
list = new Array<M>();
privete Creator()
{
const obj = new M();
obj.SameData = 'Hello data';
list.push( obj );
}
}
解决方案
认为你正在寻找这样的东西......
export interface IMyInterface<A> {
SomeData: A;
}
export class MyClass<T, M extends IMyInterface<T>> {
private list: M[] = [];
constructor(private constructorFunction: {new(): M; }) {
}
public add(item: T): void {
const obj = new this.constructorFunction();
obj.SomeData = item;
this.list.push(obj);
}
}
export class MyItem implements IMyInterface<string> {
public SomeData: string = '';
}
const collection = new MyClass<string, MyItem>(MyItem);
collection.add('Hello data');
我已经调整了您的伪代码,以便它实际编译并执行我认为您在问题中的目标。需要注意的重要一点是,TypeScript 中的类型在运行时没有表示,所以你不能这样做new T()
。相反,您需要传入类型为{ new(): M; }
. 然后,您可以new X()
使用此值来获取扩展界面的对象。
推荐阅读
- mysql - SQL获取按X排序的行,在Y列上有不同的值?
- caching - 损坏的 html 脚本 - Incapsula 会更改 html 标签的位置吗?
- javascript - Discord.js 问题
- python - Python 在函数中写入 Dataframe
- node.js - Node Express API 文件上传仅在生产时返回 404
- webpack - 是否可以使用 webpack 在另一个 js 文件中包含一个 js 片段
- office-js - Office 加载项按钮不调用函数
- ios - OpenCv 没有返回 Xcode 中 Apple Pencil 位置的灰度值
- python - 如何在 python 的 matplotlib 上为多重曲线图重新绘制一条曲线?
- python - Python - 查找图像中最常用的颜色 - 脚本似乎找到了不准确的颜色