javascript - 共享接口常用功能的有效方法
问题描述
好的,快速免责声明,我来自 C++ 世界,过去一个月左右只使用 Typescript。在这一点上可以公平地说,我对 Typescript 有点笨拙。
顺便说一句,我将 Typescript 与 pixi.js 一起使用。
我已经用DisplayObject
接口抽象了 pixi.js 显示对象。该接口的主要目的之一是为现实世界空间与 pixi.js 坐标系提供接口。DisplayObject
我这样做还有其他一些原因,因为如果我有一个可以处理的通用界面,它将使处理变得更容易。
如下所示的示例DisplayObject
:
export interface DisplayObject {
// These are in "game space" (Cartesian)
getX(): number;
setX(val: number): void;
getY(): number;
setY(val: number): void;
// These are in "screen space" (canvas coordinates: upper left, +Y down)
getScreenX(): number;
setScreenX(val: number): void;
getScreenY(): number;
setScreenY(val: number): void;
}
然后我要做的是创建特定的显示对象,例如implements
来自DisplayObject
和extends
来自适当的 pixi.js 类的精灵。
例如,Sprite
如下所示:
export class Sprite extends PIXI.Sprite implements DisplayObject {
}
我发现设置 x/y 值和/或屏幕 x/y 值的代码通常是相同的。但我不能一般地将代码与接口相关联。
有没有分享这个通用代码的好方法?或者有没有更好的方法来使用interface
和classes
改进设计。
所有显示对象类都派生自 pixi.js 类。而那些 pixi.js 类本身extend
来自一个PIXI.Container
类。
我知道如何在 C++ 和 Swift 中做到这一点,但 Typescript 不支持多重继承。或者也许 Typescript 有一些类似于 Swift 的东西extension
?
解决方案
我最终使用 Mixins 来解决这个问题。我基于这篇优秀的文章:
https://www.bryntum.com/blog/the-mixin-pattern-in-typescript-all-you-need-to-know/
推荐阅读
- python - 为未来年份生成特定格式的日期时间
- regex - 使用 shell 进行正则表达式组匹配
- python - 我想添加两个 df 列 df['Date'] 和 df['hour'] 来创建列时间戳
- c# - 如何在 C# 中通过 RabbitMQ 队列发送接收文件?
- acumatica - 使用操作\复制订单时重置自定义总和字段的值
- javascript - 期望一个赋值或函数调用,但在调用函数时看到一个表达式
- laravel - 如何从 Laravel 上的数组图像中获取 getClientOriginalName()?
- azure - Microsoft Graph API 与 IMAP/POP3 - 哪个更适合阅读邮件?
- kubernetes - Gitlab CI 无法解析 kubernetes 运行器上的服务主机名
- c# - C# - 如何在两个不同的 dll 中引用相同的类型?