
在开发实际的泛型类之前,我们先来了解一下Generic类。称为泛型的 TypeScript 类可以处理多种类型的数据。它是各种参数,并使用尖括号 () 显示。这代表了该类将用于实现此目的的数据类型。然后可以在类的属性和函数中使用类型参数,以使类灵活并可与其他数据类型重用。
我们将做一些简报。假设在示例中,类型参数被表示为“T”并且简单泛型类“MyGenericClass”的属性“value”被表示。 “T”和“价值”都可以被创造。如果此类使用替代类型(例如“数字”或“字符串”)实例化,则“值”属性将具有适当的类型。
由于同一个类可以与多种数据类型一起使用,这为您的代码提供了额外的灵活性和重用性。您还可以使用约束来限制用作类型参数的种类。
语法
在 TypeScript 中创建泛型类的语法如下 –
class ClassName { // class properties and methods}
其中“ClassName”是类的名称,“TypeParameter”是该类将使用的数据类型的占位符。
示例 1
此示例演示如何使用 TypeScript 中的泛型类来创建可处理多种数据类型的类。该类使用类型参数 T 进行定义,该参数用于该类的属性和方法中,从而允许该类灵活且可重用不同类型的数据。 “Queue”类有一个名为“data”的私有属性,它是一个 T 类型的数组。
该类还具有三个方法:“enqueue”,将项目添加到队列末尾;“dequeue”,从队列前面删除项目;“peek”,返回队列中的项目。队列前面而不删除它。我们创建了 Queue 类的两个实例,一个用于数字,另一个用于字符串。该类可以处理不同的数据类型,使我们的代码更加灵活和可重用。
class Queue { private data: T[] = [] // add an item to the end of the queue enqueue(item: T) { this.data.push(item) } // remove an item from the front of the queue dequeue(): T | undefined { return this.data.shift() } // get the item at the front of the queue peek(): T | undefined { return this.data[0] }}let numberQueue = new Queue()numberQueue.enqueue(1)numberQueue.enqueue(2)console.log(numberQueue.peek())console.log(numberQueue.dequeue())console.log(numberQueue.peek())let stringQueue = new Queue()stringQueue.enqueue('Hello')stringQueue.enqueue('world')console.log(stringQueue.peek())console.log(stringQueue.dequeue())console.log(stringQueue.peek())
编译时,它将生成以下 JavaScript 代码。
Wordware
Wordware是一个自然语言编程工具,使任何人都可以开发、迭代和部署有用的AI应用程序。
139 查看详情
var Queue = /** @class */ (function () { function Queue() { this.data = []; } // add an item to the end of the queue Queue.prototype.enqueue = function (item) { this.data.push(item); }; // remove an item from the front of the queue Queue.prototype.dequeue = function () { return this.data.shift(); }; // get the item at the front of the queue Queue.prototype.peek = function () { return this.data[0]; }; return Queue;}());var numberQueue = new Queue();numberQueue.enqueue(1);numberQueue.enqueue(2);console.log(numberQueue.peek());console.log(numberQueue.dequeue());console.log(numberQueue.peek());var stringQueue = new Queue();stringQueue.enqueue('Hello');stringQueue.enqueue('world');console.log(stringQueue.peek());console.log(stringQueue.dequeue());console.log(stringQueue.peek());
输出
上述代码将产生以下输出 –
112HelloHelloworld
示例 2
在此示例中,我们将开发另一个具有两种泛型类型属性的泛型类。 “KeyValuePair”类有两个私有属性,“key”和“value”,分别为 T 类型和 U 类型。该类还有两个方法“getKey”和“getValue”,分别返回键和值属性。
该类可以使用数据类型(例如数字、字符串或对象)实例化键和值。我们创建了 KeyValuePair 类的两个实例,一个以字符串作为键,数字作为值,另一个以字符串作为键,对象作为值。该类可以使用不同的数据类型作为键和值,使我们的代码更加灵活和可重用。
class KeyValuePair { private key: T private value: U constructor(key: T, value: U) { this.key = key this.value = value } // method to get the key getKey(): T { return this.key } // method to get the value getValue(): U { return this.value }}let numberKeyValuePair = new KeyValuePair('age', 20)console.log(numberKeyValuePair.getKey()) // "age"console.log(numberKeyValuePair.getValue()) // 20let objectKeyValuePair = new KeyValuePair('person', { name: 'Tutorialspoint', age: 10,})console.log(objectKeyValuePair.getKey()) // "person"console.log(objectKeyValuePair.getValue()) // {name: "Tutorialspoint", age: 10}
编译时,它将生成以下 JavaScript 代码。
var KeyValuePair = /** @class */ (function () { function KeyValuePair(key, value) { this.key = key; this.value = value; } // method to get the key KeyValuePair.prototype.getKey = function () { return this.key; }; // method to get the value KeyValuePair.prototype.getValue = function () { return this.value; }; return KeyValuePair;}());var numberKeyValuePair = new KeyValuePair('age', 20);console.log(numberKeyValuePair.getKey()); // "age"console.log(numberKeyValuePair.getValue()); // 20var objectKeyValuePair = new KeyValuePair('person', { name: 'Tutorialspoint', age: 10});console.log(objectKeyValuePair.getKey()); // "person"console.log(objectKeyValuePair.getValue()); // {name: "Tutorialspoint", age: 10}
输出
上述代码将产生以下输出 –
age20person{ name: 'Tutorialspoint', age: 10 }
在 TypeScript 中使用泛型类可以生成更灵活、可重用且可维护的代码。此外,TypeScript 的类型检查系统可确保泛型类中使用的类型在编译时正确使用,从而进一步提高代码的整体质量和安全性。泛型类是 TypeScript 的一项强大功能,可用于编写更可靠和可重用的代码。
以上就是如何开发通用类的详细内容,更多请关注创想鸟其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/832484.html
微信扫一扫
支付宝扫一扫