MST
星途 面试题库

面试题:TypeScript中迭代器与生成器类型约束的基础应用

请用TypeScript实现一个简单的迭代器,用于遍历一个数组,并使用类型约束确保迭代器返回值为数字类型。同时,解释一下在这个过程中类型约束是如何起作用的。
32.0万 热度难度
前端开发TypeScript

知识考点

AI 面试

面试题答案

一键面试

代码实现

class NumberArrayIterator {
    private array: number[];
    private index: number;

    constructor(array: number[]) {
        this.array = array;
        this.index = 0;
    }

    next(): { value: number | undefined; done: boolean } {
        if (this.index < this.array.length) {
            const value = this.array[this.index];
            this.index++;
            return { value, done: false };
        }
        return { value: undefined, done: true };
    }
}

使用示例

const numbers = [1, 2, 3];
const iterator = new NumberArrayIterator(numbers);
let result = iterator.next();
while (!result.done) {
    console.log(result.value);
    result = iterator.next();
}

类型约束的作用

  1. 类属性类型约束:在 NumberArrayIterator 类中,private array: number[] 明确指定了 array 属性必须是一个数字类型的数组。这意味着在构造函数中传入的参数也必须是数字数组,否则TypeScript编译器会报错。例如,如果传入 ['a', 'b'] 这样的字符串数组,编译器会提示类型错误。
  2. 方法返回值类型约束next 方法的返回值类型被定义为 { value: number | undefined; done: boolean },明确了 value 要么是数字类型,要么是 undefineddone 是布尔类型。这确保了调用者在使用 next 方法返回值时,能按照预期的类型来处理,比如可以安全地对 value 进行数字相关的操作,而不用担心类型不匹配的问题。如果方法内部返回的类型不符合这个定义,TypeScript编译器同样会报错。