gpt4 book ai didi

typescript - 是否可以从 TypeScript 中的字符串文字数组定义联合类型别名?

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

在 TypeScript 中,我可以做以下两件事:

type ToolboxSpaceType = 'screw'|'hammer'|'screwdriver'; // 1

ProxyProperties = ['screw', 'hammer', 'screwdriver']; // 2

class Toolbox {
[key: ToolboxSpaceType]: ToolboxSpace;
}

let proxyHandler = {
get(target: Toolbox, prop: PropertyKey, receiver: any) {
if (ProxyProperties.include(prop) {
//...do something special...
}
}
}
let personalToolbox = new Toolbox();
let personalToolboxProxy = new Proxy(personalToolbox, proxyHandler)

我希望能够从 ProxyProperties 字符串数组生成 ToolboxSpaceType。有没有办法在 TypeScript 中做到这一点?

最佳答案

注意:您帖子中显示的代码存在问题,无法按编写的方式编译。以下答案仅涉及涉及 ToolboxSpaceType 类型和 ProxyProperties 数组的前两行,因为这就是您要询问的内容。


你可以的。最好添加一个辅助函数,这样您的数组就不会被推断为只是 string[]。以下函数强制将数组元素类型推断为字符串文字的并集:

function literalArray<K extends string>(args: K[]): K[] {
return args;
}

现在 ProxyProperties 被推断为 ('screw'|'hammer'|'screwdriver')[]:

const ProxyProperties = literalArray(['screw', 'hammer', 'screwdriver']);  

并且您可以通过提取其元素类型来计算并集:

type ToolboxSpaceType = typeof ProxyProperties[number];

an answer to another question我推荐了一个辅助函数(tuple() in tuple.ts)来推断元组类型,这对你来说可能更好,因为 ProxyProperties 在已知顺序。你会像这样使用它:

const ProxyProperties = tuple('screw', 'hammer', 'screwdriver');  
//inferred as type ["screw", "hammer", "screwdriver"]

type ToolboxSpaceType = typeof ProxyProperties[number]; // still works

希望对您有所帮助;祝你好运!

关于typescript - 是否可以从 TypeScript 中的字符串文字数组定义联合类型别名?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46325568/

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