【发布时间】:2020-11-08 18:24:48
【问题描述】:
我正在尝试定义一个类的公共方法可以返回的“可接受”类型的列表。这样做的目的是确保类方法的响应可以通过JSON.stringify 进行序列化。例如,Maps 无法安全地进行字符串化,这将导致 {} 通过网络发送。
我第一次尝试这样做是:
type TAcceptableReturns = string | number | undefined | Array<any>;
interface IReturnsAcceptable
{
[index: string]: (() => Promise<TAcceptableReturns>) | (() => TAcceptableReturns),
}
class myActualClass implements IReturnsAcceptable
{
[index: string]: (() => Promise<TAcceptableReturns>) | (() => TAcceptableReturns);
private myInternalState: number; // ERROR: Doesn't return a function
public constructor()
{
this.myInternalState = 1;
}
public MyPubMethod(): number
{
return this.myInternalState;
}
}
如您所见,这种方法不完美有两个核心原因:
- 它需要对实际类的实现进行扩充(需要添加
[index: string]: T)。 - 当我只打算检查公共方法/属性时,它还将类型限制应用于类的私有属性。
有谁知道将约束应用于类的所有公共方法/属性的方法?
为了完整起见,如果您的解决方案不仅可以用于限制返回类型,还可以用于限制参数的类型,这将是很好的,尽管我目前没有这个用途。
【问题讨论】:
标签: typescript class types constraints