可以创建连接两个字段的打字稿类型吗?
Posted
技术标签:
【中文标题】可以创建连接两个字段的打字稿类型吗?【英文标题】:Can a typescript type be created that concatenates two fields? 【发布时间】:2020-10-05 09:23:01 【问题描述】:我想做这样的事情:
interface Apple
type: string;
color: string;
type RealApple = WithConcat<Apple, 'type', 'color'>;
所以RealApple
的结果类型是:
type RealApple =
type: string;
color: string;
'type#color': string;
这可能吗?我怎样才能实现WithConcat
?原因是在与数据库通信时处理类型,其中复合排序键是从其他两个字段创建的,而这些字段在架构上实际上并没有该复合。
【问题讨论】:
【参考方案1】:如果有一个实现你的接口的类呢?
interface Apple
type: string;
color: string;
class RealApple implements Apple
constructor(public type: string = "", public color: string = "")
// this is the equivalent of your composite key.
public get typeAndColor(): string
return `$this.type_$this.color`;
public static fromApple(apple: Apple): RealApple
return new RealApple(apple.type, apple.color);
const apple: RealApple = RealApple.fromApple(
type: "braeburn",
color: "red"
);
apple.typeAndColor; // braeburn_red
【讨论】:
【参考方案2】:这是我想出的解决方案,它不是直接的打字稿类型,而是完成了我需要的:
function withConcat<T>(item: T, field1: keyof T, field2: keyof T)
return
...item,
[`$field1#$field2`]: `$item[field1]#$item[field2]`
【讨论】:
以上是关于可以创建连接两个字段的打字稿类型吗?的主要内容,如果未能解决你的问题,请参考以下文章