接口在类型控制中的应用

接口是编程中一个强大的工具,它允许定义一个类型必须具备的行为,而不需要实现这些行为的具体细节。在本文中,将展示如何使用接口来设置类型,以确保它们具备某些特定的行为。为了说明这一点,将创建一个简单的接口来控制字符串的验证。

需求说明:

验证的需求非常简单直接。需要确定一个字符串是否满足以下条件:

  • 字符串的长度是否大于或等于一个最小值。
  • 字符串的长度是否小于或等于一个最大值。
  • 使用一个名为IsValid的方法来确定字符串是否有效。

有了这些简单的需求,就可以开始编写代码了。

在开始编写代码之前,想先解释一下为什么会写下这些需求。作为一名专业的开发者,喜欢明确知道自己在编写什么。发现,将需求写下来是开始解决问题的一个很好的起点。

实现

回到代码本身。需求之一是希望有一个名为IsValid的方法,验证代码将使用这个方法。这就是接口的用武之地;接口本身没有实现能力,所以不能在接口中编写任何实际的逻辑,但可以声明想要使用的方法。以下是接口的代码:

interface Validate { IsValid(): boolean; }

现在,需要对接口做一些事情。为了满足需求,将创建一个类来验证字符串是否达到了最小长度,另一个类来确定字符串是否达到了最大长度。这两个类都将使用接口;为此,需要使用implements关键字来声明类实现了接口。

class MinimumLengthValidation implements Validate { constructor(private text: string, private minimumLength: number) {} IsValid(): boolean { return this.text.length >= this.minimumLength; } } class MaximumLengthValidation implements Validate { constructor(private text: string, private maximumLength: number) {} IsValid(): boolean { return this.text.length <= this.maximumLength; } }

可能已经注意到构造函数看起来有些不寻常。在构造函数的签名中声明了text和minimumLength。通过将它们标记为private,告诉TypeScript希望在这里分配它们。实际上,这段代码与以下代码完全相同:

class MinimumLengthValidation implements Validate { private text: string; private minimumLength: number; constructor(text: string, minimumLength: number) { this.text = text; this.minimumLength = minimumLength; } IsValid(): boolean { return this.text.length >= this.minimumLength; } }

最大长度验证的代码看起来与此非常相似,这并不令人惊讶。

测试代码

编写了验证类之后,准备测试它们。可以这样编写代码:

console.log(new MinimumLengthValidation('ABC12345', 10).IsValid()); // 应该打印 false console.log(new MinimumLengthValidation('ABC12345AB12345', 10).IsValid()); // 应该打印 true console.log(new MaximumLengthValidation('ABC12345', 10).IsValid()); // 应该打印 true console.log(new MaximumLengthValidation('ABC12345AB12345', 10).IsValid()); // 应该打印 false

但这并没有真正展示验证,所以让看看如何使用Validate接口。将创建一个Validate项目的数组。

const validation: Validate[] = []; validation.push(new MinimumLengthValidation('ABC12345', 10)); validation.push(new MinimumLengthValidation('ABC12345AB12345', 10)); validation.push(new MaximumLengthValidation('ABC12345', 10)); validation.push(new MaximumLengthValidation('ABC12345AB12345', 10));

有了这个,将使用一个循环遍历数组,并打印出验证是否成功。

for (let index = 0; index < validation.length; index++) { console.log(validation[index].IsValid()); }

已经完成了使用接口来描述一个类可以有哪些行为的过程。开始进入继承的领域,这是面向对象编程的支柱之一。在下一篇文章中,将进一步探讨继承的世界,届时将真正加快步伐。

沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485