在 TypeScript 上生成默认映射

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

我有一个像这样的界面(但有超过 20 个字段)

export interface HouseDetails {
    title: string | undefined;
    url: URL;
    address?: string;
    logo?: URL;
    price?: number;
    sq_meters?: number;
}

我想生成一条带有

HouseDetails
键的记录,但其所有值都设置为默认值(例如,空字符串
""
)。这是我尝试过的代码,但是当我将其打印到控制台时,它是一个空对象:

function generateDefaultMapping<T extends Object, D>(default_value: D): Record<keyof T, D> {
  return Object.fromEntries(Object.keys({} as T).map((key) => [key, default_value])) as Record<keyof T, D>;
}

// Use the function to create a default mapping for HouseDetails
const default_mapping<Record<keyof HouseDetails, string> = generateDefaultMapping<HouseDetails, string>("");
console.log(default_mapping) // {}

我认为问题是这不像 C++ 模板那样工作,但是,有什么办法可以做到吗?

javascript typescript
1个回答
0
投票

最简单的方法(无需任何模式)是显式定义

HouseDetails
中使用的默认值。你可以用 lodash defaults 来看看。

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