ARKTS泛型函数使用

admin2024-08-16  9

泛型函数的定义

泛型是指在定义函数,接口或类时,不预先指定具体的类型,而是在运行时再指定类型的能力,这使得代码更加灵活可重用
泛型函数的类型参数通过尖括号‘<>’来定义,通常放在函数名称后面,这样,函数可以在不同的调用场景中适配不同的数据类型。
实例:

function identity<T>(arg: T): T {
    return arg;
}

在这个例子中,'T’是一个类型参数,函数’identyty’的参数和返回值都使用了这个类型参数。这意味着可以用任意类型来调用这个函数
实例·

let result1 = identity<number>(42);   // result1 的类型是 number
let result2 = identity<string>("Hello");  // result2 的类型是 string

这里‘identity’表示类型参数’T’被替换为‘number’,因此函数参数‘arg’必须是‘number’类型。同样地,‘identity’将’T’t替换成’string’

泛型约束

有时希望泛型函数不仅仅适用于任意类型,而是要对类型参数进行一定的约束。例如要求传入的类型必须具有某些属性或者方法

interface HasLength {
    length: number;
}

function logLength<T extends HasLength>(arg: T): void {
    console.log(arg.length);
}

logLength("Hello");           // 字符串具有 length 属性
logLength([1, 2, 3]);         // 数组具有 length 属性

在这个例子中,‘T extends HasLength’表示‘T’必须是一个具有‘length’属性的类型

泛型在类和接口中的使用

大多用于基类的封装

class GenericClass<T> {
    value: T;

    constructor(value: T) {
        this.value = value;
    }

    getValue(): T {
        return this.value;
    }
}

let instance = new GenericClass<number>(42);
console.log(instance.getValue());   // 输出 42

泛型接口

interface GenericInterface<T> {
    value: T;
    getValue(): T;
}

class GenericClass<T> implements GenericInterface<T> {
    value: T;

    constructor(value: T) {
        this.value = value;
    }

    getValue(): T {
        return this.value;
    }
}

let instance = new GenericClass<string>("Hello");
console.log(instance.getValue());   // 输出 "Hello"

多个泛型参数

函数和类可以使用多个泛型参数,定义多个类型

function pair<A, B>(first: A, second: B): [A, B] {
    return [first, second];
}

let result = pair<string, number>("hello", 42);

在这个例子中,函数‘pair’接收两个不同类型的参数,并返回一个包含这两个类型的元组

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明原文出处。如若内容造成侵权/违法违规/事实不符,请联系SD编程学习网:675289112@qq.com进行投诉反馈,一经查实,立即删除!