TSLint提到了通用处理程序

时间:2018-11-13 09:05:38

标签: typescript tslint

我使用事件分派器在TypeScript中的类内注册和激发事件。该代码工作正常。为了获得更好的代码质量,我使用TSLint,它对我声明处理程序的方式不满意,但我不理解其描述。

代码片段:

export type Handler<E> = (event: E) => void;

export class EventDispatcher<E> {
    private handlers: Handler<E>[] = [];

    public fire(event: E) {
        for (const h of this.handlers) {
            h(event);
        }
    }

    public register(handler: Handler<E>) {
        this.handlers.push(handler);
    }
}

TSLint对代码中的第4行,特别是对Handler<E>[]不满意。消息是:

  

[tslint]对于非简单类型,禁止使用'T []'的数组类型。采用   而是使用“数组”。 (数组类型)[tslint]使用'T []'的数组类型为   禁止用于非简单类型。请改用“数组”。类型   处理程序=(事件:E)=>无效

我不完全理解TSLint要我做什么。为什么T被禁止?非简单类型是什么意思?它还说我应该改用数组,但是Handler<E>[]已经是数组。那哪里有问题呢?

1 个答案:

答案 0 :(得分:1)

很难读取非简单类型的数组。考虑定义为:

的变量
let foo: { prop1: string; prop2: string;}[]

使用这样的日志项目类型可能很容易错过最后的[]。即使在您的情况下,由于数组的项是通用类型,也可能很容易在[]之后的末尾错过<..>

lint希望您使用长格式的数组,即通用Array<T>类型。两种形式完全等效,因此只是可读性问题。在您的情况下,这应该有效

export type Handler<E> = (event: E) => void;

export class EventDispatcher<E> {
    private handlers: Array<Handler<E>> = [];

    public fire(event: E) {
        for (const h of this.handlers) {
            h(event);
        }
    }

    public register(handler: Handler<E>) {
        this.handlers.push(handler);
    }
}