【发布时间】:2019-06-27 03:36:30
【问题描述】:
我正在寻找一种特定的功能。
下面我有一个StringHandler 类和一个StringOrNullHandler 类。两者都有静态方法。
export class StringHandler {
static getString (s): string {
if (s === 'red') throw new Error;
return s;
}
static getStrings (s: string[]) : string[] {
return s.map(StringHandler.getString);
}
}
export class StringOrNullHandler {
static getString (s): string | null {
if (s === 'red') return null;
return s;
}
}
我有兴趣替换 StringOrNullHandler.getString 方法并更改 StringOrNullHandler.getStrings 方法的执行方式。
StringHandler.getStrings(['red']) // throws
StringOrNullHandler.getStrings(['red']) // return [null]
我可以在他们不使用static 方法的情况下做这样的事情,并且我可以扩展类。
export class _StringHandler {
getString (s): string {
if (s === 'red') throw new Error;
return s;
}
getStrings (s: string[]) : string[] {
return s.map(this.getString);
}
}
export const StringHandler = new _StringHandler();
export class _StringOrNullHandler extends _StringHandler{
getString (s): string | null {
if (s === 'red') return null;
return s;
}
}
export const StringOrNullHandler = new _StringHandler();
StringHandler.getStrings(['red']) // throws
StringOrNullHandler.getStrings(['red']) // return [null]
但是现在我有一个不同的问题StringOrNullHandler.getStrings 方法仍然认为返回类型只能是字符串并且不能为空。
是否有更可组合的方式来获得此功能?
【问题讨论】:
-
您的 sn-ps 似乎有误。在第一个
StringOrNullHandler.getStrings中根本没有定义。在您的第二个 sn-p 中,_StringOrNullHandler.getString方法被错误地标记为静态。 -
此外,您的
StringOrNullHandler对象的实例化方式与StringHandler相同。它只是一个错字还是您的实际代码以及它不起作用的原因?
标签: typescript class ecmascript-6