我可以定义一个接口,允许我在特定字符串上调用自定义方法吗?

问题描述 投票:0回答:1

我有一个返回这样的对象的数据库:

interface Bicycle {
  id: string;
  created_at: string;
}

我知道

created_at
拥有一个机器友好的日期,我需要将其转换为 Date 对象以进行本地化:
new Date(bike.created_at)

我不想将

created_at
定义为普通字符串,而是将其定义为扩展字符串的类型,并使用我可以调用的方法将其转换为日期:
bike.created_at.toDate()

这将提供一种简单、类型安全的方法,从这些保存日期的字符串中获取 Date 对象,正如数据库所保证的那样。

实现可能如下所示:

interface DateString extends string {
  toDate(): Date;
}

interface Bicycle {
  id: string;
  created_at: DateString;
}

但是,除非我将字符串原型突变为“猴子补丁”我的

toDate
实现,否则这将不起作用。我知道改变原型是不好的做法,因为它可能会导致不可预测的行为。我也不想让
toDate
可用于我的应用程序中非日期的所有其他字符串。

我可以编写一个转换器,从数据库中获取对象并用日期替换

created_at
字符串。但这似乎比我尝试的示例更脆弱,其中
created_at
是标记为具有特殊日期用途的字符串。

typescript extension-methods
1个回答
0
投票

虽然不建议这样做,但您可以使用

String.prototype
方法扩展
toDate
。然后,只需
declare global { … }
即可“发布”字符串类型的更改。

© www.soinside.com 2019 - 2024. All rights reserved.