TSLint 提到通用处理程序的问题
TSLint mentions problems with generic Handler
我使用事件调度程序在 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] Array type using 'T[]' is forbidden for non-simple types. Use
'Array' instead. (array-type) [tslint] Array type using 'T[]' is
forbidden for non-simple types. Use 'Array' instead. type
Handler = (event: E) => void
我不完全理解 TSLint 要我做什么。为什么 T
被禁止?非简单类型是什么意思?它还说我应该改用数组,但是 Handler<E>[]
已经是一个数组。那么哪里有问题呢?
非简单类型的数组难以阅读。考虑一个变量定义为:
let foo: { prop1: string; prop2: string;}[]
这样的日志项类型可能很容易漏掉末尾的[]
。即使在您的情况下,由于数组的项目是泛型类型,也可能很容易在 <..>
.
之后的末尾错过 []
linter 希望您使用数组的长形式,通用 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);
}
}
我使用事件调度程序在 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] Array type using 'T[]' is forbidden for non-simple types. Use 'Array' instead. (array-type) [tslint] Array type using 'T[]' is forbidden for non-simple types. Use 'Array' instead. type Handler = (event: E) => void
我不完全理解 TSLint 要我做什么。为什么 T
被禁止?非简单类型是什么意思?它还说我应该改用数组,但是 Handler<E>[]
已经是一个数组。那么哪里有问题呢?
非简单类型的数组难以阅读。考虑一个变量定义为:
let foo: { prop1: string; prop2: string;}[]
这样的日志项类型可能很容易漏掉末尾的[]
。即使在您的情况下,由于数组的项目是泛型类型,也可能很容易在 <..>
.
[]
linter 希望您使用数组的长形式,通用 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);
}
}