搜索词
声明,类,方法
建议
我知道 declare
关键字已经支持类属性。我在想是否可以将支持也扩展到类方法上?
用例
你重写了 a
方法,并且还有一些其他方法返回 a
的返回值。
示例
这只是一个简单的例子来描述我的想法。
class BaseTag
{
constructor(tag: string) {...}
static fromString(tag: string): BaseTag
{
return new BaseTag(tag);
}
static fromNumber(tag: number): BaseTag
{
return this.fromString(tag.toString());
}
}
class ExtendedTag extends BaseTag
{
static fromString(tag: string): ExtendedTag
{
return new BaseTag(`Tag: ${ tag}`);
}
declare static fromNumber(tag: number): ExtendedTag;
// // Without `declare` support
// static fromNumber(tag: number): ExtendedTag
// {
// return super.fromString(tag) as unknown as ExtendedTag;
// }
}
检查清单
我的建议满足以下准则:
- 这不会对现有的 TypeScript/JavaScript 代码造成破坏性改变
- 这不会改变现有 JavaScript 代码的运行时行为
- 这可以在不根据表达式的类型发出不同的 JS 的情况下实现
- 这不是一个运行时特性(例如库功能,带有 JavaScript 输出的非 ECMAScript 语法等)
- 这个特性将与 TypeScript's Design Goals 的其他部分保持一致。
6条答案
按热度按时间gg0vcinb1#
你所要求的是 #5863
uz75evzq2#
你所要求的是 #5863
@RyanCavanaugh 不,这是一个不同的想法。让我给你另一个例子:
TypeScript Playground
虽然这个例子似乎可以用泛型替换,但如果有多个返回类型需要替换怎么办?
我知道我可以使用一个与类名相同的接口来覆盖方法,但这只适用于公共成员,而不是受保护或私有的成员。
更重要的是,如果
declare
关键字已经支持类属性,为什么不也支持类方法呢?zy1mlcev3#
我应该为这个写一个提案吗?
6kkfgxo04#
declare protected toObject: () => ObjectMixin<ExtendedInterface>;
应该可以工作?liwlm1x95#
declare protected toObject: () => ObjectMixin<ExtendedInterface>;
应该可以工作吧?@whzx5byb 是的,这个应该可以。但我希望
declare
的方法也能支持。抱歉回复晚了 😅
ma8fv8wu6#
declare protected toObject: () => ObjectMixin<ExtendedInterface>;
应该可以工作吧?@whzx5byb 嗯...这种方法有一个问题,你不能使用一个方法来覆盖一个属性,这意味着这个方法不起作用: