Создание итератора с помощью TypeScript и свертки

Aaron спросил: 03 февраля 2018 в 11:00 в: typescript

Я пишу приложение в TypeScript, и я использую Rollup для объединения файлов вместе и Buble / Babel для преобразования скомпилированного Javascript во что-то, что может использовать браузер. Однако, когда я запускаю rollup -c, я получаю сообщение об ошибке:

semantic error TS2495 Type 'Radius' is not an array type or a string type.

Не уверен, что делать с этим, поскольку, похоже, не так много информации об итераторах в TypeScript, которые я могу найти по обычным маршрутам поисковой машины. Вот мои файлы:

rollup.config.ts

import typescript from 'rollup-plugin-typescript2';
import uglify from 'rollup-plugin-uglify';
import buble from 'rollup-plugin-buble';export default {
    input: "./chess-player.ts",
    output: {
        file: "./chess-player.min.js",
        format: "iife"
    },
    watch: {
        include: [
            "./chess-player.ts",
            "./src/*/*.ts",
            "./src/*.ts"
        ]
    },
    plugins: [
        typescript(),
        buble(),
        uglify()
    ]
};

tsconfig.json:

{
    "compilerOptions": {
    "target": "ES2015",
    "module": "ES2015",
    "strict": true,
    "removeComments": true,
    "esModuleInterop": true
    }
}

radius.ts:

export class Radius implements IterableIterator<number> {
    counter: number;
    max?: number;    [Symbol.iterator](): IterableIterator<number> {
        return this;
    }    next(): IteratorResult<number> {
        if (!this.max || this.counter < this.max) {
            this.counter++;
            return {
                value: this.counter,
                done: false
            };
        } else {
            this.counter = 0;
            return {
                value: undefined,
                done: true
            };
        }
    }    constructor(max?: number) {
        this.counter = 0;
        this.max = max;
    }
}

Пример экземпляра Radius реализован как свойство класса Piece. Вот метод, который пытается его использовать:

checkAttackRadius(boardElement: HTMLElement, pieceSquare: Square): void {
    const piece = pieceSquare.piece;
    let vectors = piece.attacks();
    for (let radius of piece.radius) {
        const remaining = this.remaining(vectors);
        if (radius > 14 || remaining === 0) {
            break;
        }
        for (let j = 0; j < vectors.length; j++) {
            this.checkAttackVector(boardElement, pieceSquare, vectors[j], radius);
        }
    }
}

0 ответов