Typescript TSLint提到了泛型处理程序的问题
我使用事件调度器在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
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希望您使用数组的长形式,即genericarray
类型。这两种形式完全相同,因此这只是一个可读性问题。对你来说,这应该行得通
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);
}
}