TypeScript Mixins 概念介绍

简介: TypeScript Mixins 概念介绍

Mixins


除了传统的 OO 层次结构,另一种从可重用组件构建类的流行方法是通过组合更简单的部分类来构建它们。 您可能熟悉 Scala 等语言的 mixin 或特征的想法,并且该模式在 JavaScript 社区中也很流行。


模式依赖于使用具有类继承的泛型来扩展基类。 TypeScript 最好的 mixin 支持是通过类表达式模式完成的。


看一个例子

class Sprite {

 name = "";

 x = 0;

 y = 0;

 constructor(name: string) {

   this.name = name;

 }

}

type Constructor = new (...args: any[]) => {};

// This mixin adds a scale property, with getters and setters

// for changing it with an encapsulated private property:

function Scale(Base: TBase) {

 return class Scaling extends Base {

   // Mixins may not declare private/protected properties

   // however, you can use ES2020 private fields

   _scale = 1;

   setScale(scale: number) {

     this._scale = scale;

   }

   get scale(): number {

     return this._scale;

   }

 };

}

const EightBitSprite = Scale(Sprite);

const flappySprite = new EightBitSprite("Bird");

flappySprite.setScale(0.8);

console.log('Ethan:' ,flappySprite.scale);

本例子和我之前的文章TypeScript 类装饰器的一个例子和使用单步调试搞清楚其运行原理其实很类似,只是没有使用装饰器语法罢了。

使用Scale 对 Sprite 进行装配,传入的是 Class Sprite 的定义:

image.png

image.png

image.png

Constrained Mixins

我们可以对上述 Mixins 做一些改造和增强。

在上面的形式中,mixin 没有类的基础知识,这会使创建你想要的设计变得困难。

比如,使用上面的 mixin,我们可以给任意的 Class 添加 _scale 属性。

image.png

image.png

image.png

image.png

image.png

image.png

相关文章
|
18天前
|
JavaScript 前端开发 数据安全/隐私保护
TypeScript中装饰器的概念与使用场景
【4月更文挑战第23天】TypeScript的装饰器是特殊声明,用于附加到类的声明、方法、属性或参数,以修改行为。它们以`@expression`形式,其中`expression`是运行时调用的函数。装饰器应用场景包括:日志记录、调试、依赖注入、权限控制和AOP。通过装饰器,可以实现动态行为修改,如添加日志、注入依赖、控制权限以及事务管理。然而,应谨慎使用,避免过度复杂化代码。装饰器在现代 TypeScript 开发中扮演重要角色,帮助编写更健壮、可维护的代码。
|
7月前
|
资源调度 JavaScript 前端开发
【TypeScript】Ts基本概念
【TypeScript】Ts基本概念
46 0
|
4月前
|
存储 JavaScript 算法
TypeScript算法专题 - [双链表1] - 双链的概念及其实现
TypeScript算法专题 - [双链表1] - 双链的概念及其实现
26 0
|
4月前
|
JavaScript 前端开发 程序员
TypeScript【枚举、联合类型函数_基础、函数_参数说明 、类的概念、类的创建】(二)-全面详解(学习总结---从入门到深化)
TypeScript【枚举、联合类型函数_基础、函数_参数说明 、类的概念、类的创建】(二)-全面详解(学习总结---从入门到深化)
20 0
|
9月前
|
存储 JavaScript 安全
TypeScript中的泛型:深入理解泛型的概念和应用场景
TypeScript中的泛型:深入理解泛型的概念和应用场景
|
10月前
|
JavaScript 前端开发
【TypeScript】原始数据的类型详解概念
【TypeScript】原始数据的类型详解概念
|
10月前
|
JavaScript 前端开发 程序员
TypeScript 系列(一):TS 核心概念
TypeScript 系列(一):TS 核心概念
89 0
|
JavaScript 前端开发 编译器
TypeScript 里的 module 概念
TypeScript 里的 module 概念
178 0
|
JavaScript 前端开发
TypeScript Narrowing 的概念
TypeScript Narrowing 的概念
115 0
TypeScript Narrowing 的概念
|
18天前
|
JavaScript 编译器
TypeScript中类型守卫:缩小类型范围的艺术
【4月更文挑战第23天】TypeScript中的类型守卫是缩小类型范围的关键技术,它帮助我们在运行时确保值的精确类型,提升代码健壮性和可读性。类型守卫包括`typeof`(检查原始类型)、`instanceof`(检查类实例)和自定义类型守卫。通过这些方法,我们可以更好地处理联合类型、泛型和不同数据源,降低运行时错误,提高代码质量。