gpt4 book ai didi

typescript - 修改类型以包含对象的静态值而不是它们的派生类型({ test : 3 } instead of { test: number })

转载 作者:搜寻专家 更新时间:2023-10-30 21:10:06 25 4
gpt4 key购买 nike

我正在尝试创建一个调色板,我想导出一个包含我所有颜色的对象,并获取它们的输入信息。由于每个键只能是一个值,所以我希望它们的类型将导出为该特定值。但是,当我简单地导出颜色集时,每个键都会变成一个字符串(而不是特定值)。

 export const red = "#FF0000";
export const tuna = "#36393F";

export default {
red,
tuna
};

如果我执行以下操作,我会得到我想要的。但是,每次添加颜色时,我都必须手动添加到类型中。

 export const red = "#FF0000";
export const tuna = "#36393F";

type enumInterface = {
tuna: typeof tuna;
red: typeof red;
};
const defaultExport: enumInterface = {
tuna,
red
};
// When I import this in another file the typing information
// shows the hexcode instead of type string. which is what I want
export default {
...defaultExport
};

我知道映射类型,所以我希望做这样的事情,但它不起作用,因为 T[P] 不是一个值而是一个类型。

type testInterface<T> = {
[P in keyof T] : typeof T[P];
}

我希望有人知道如何实现与第二组类似的效果,但使用映射类型,这样我就不必输入每种类型。感谢您提供的任何帮助!

最佳答案

获取文字类型的最简单的解决方案是只使用类型断言:

const defaultExport = {
tuna: "#36393F" as "#36393F",
red: "#FF0000" as "#FF0000"
};

如果您打算多次使用此模式(或有许多枚举成员),您可以创建一个帮助类来帮助构建枚举。

class EnumBuilder<T = {}> {
private allValues: any;
end(): { [P in keyof T] : T[P]} {
return this.allValues;
}
add<TKey extends string, TValue extends string>(key: TKey, value: TValue): EnumBuilder<T & { [P in TKey]: TValue }>{
this.allValues[key] = value;
return this as any;
}
}

const defaultExport = new EnumBuilder()
.add('red', "#FF0000")
.add('tuna', "#36393F")
.end();

export default {
...defaultExport
};

关于typescript - 修改类型以包含对象的静态值而不是它们的派生类型({ test : 3 } instead of { test: number }),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50863026/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com