Typescript TSLint提到了泛型处理程序的问题

Typescript TSLint提到了泛型处理程序的问题,typescript,tslint,Typescript,Tslint,我使用事件调度器在TypeScript中的类内注册和触发事件。代码运行良好。为了提高代码质量,我使用了TSLint,它对我声明处理程序的方式不满意,但我不理解描述 代码片段: export type Handler<E> = (event: E) => void; export class EventDispatcher<E> { private handlers: Handler<E>[] = []; public fire(eve

我使用事件调度器在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);
    }
}
导出类型处理程序=(事件:E)=>void;
导出类EventDispatcher{
私有处理程序:处理程序[]=[];
公共火灾(事件:E){
for(此.handlers的常数h){
h(事件);
}
}
公共寄存器(处理程序:处理程序){
this.handlers.push(handler);
}
}
TSLint对代码中的第4行不满意,特别是关于
Handler[]
。信息是:

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


我不完全明白TSLint要我做什么。为什么禁止
T
?非简单类型意味着什么?它还说我应该使用数组,但是
Handler[]
已经是数组了。那么问题出在哪里呢?

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

let foo: { prop1: string; prop2: string;}[]
对于这样的日志项类型,可能很容易错过末尾的
[]
。即使在您的情况下,由于数组的项是泛型类型,因此很容易错过
[]
后面末尾的

linter希望您使用数组的长形式,即generic
array
类型。这两种形式完全相同,因此这只是一个可读性问题。对你来说,这应该行得通

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);
    }
}
导出类型处理程序=(事件:E)=>void;
导出类EventDispatcher{
私有处理程序:数组=[];
公共火灾(事件:E){
for(此.handlers的常数h){
h(事件);
}
}
公共寄存器(处理程序:处理程序){
this.handlers.push(handler);
}
}