我正在编写一个声明文件,该文件应声明一个全局类型,并严格限制于特定的字符串短语列表。
这些字符串短语实际上是位于JSON文件中的对象中属性键的一部分。
两个问题:
Object.keys
和的基本功能对其进行处理Array.map
?让我给你一个代码示例。
假设我们有以下名为的JSON文件data.json
:
{
"someList": {
"#key1": {"a": 1, "b": 2},
"#key2": "some value",
"#key3": 1234
}
}
现在,我要创建以下声明文件global.d.ts
:
import data from './data.json';
declare global {
type AllowedKeys = Object(data.someList).map(key => key.substr(1));
}
基本上,我需要这样定义类型(动态地随着JSON文件的更改):
type AllowedKeys = "key1" | "key2" | "key3";
任何帮助或至少指导将不胜感激。
您可以让打字稿根据json文件中的数据推断出类型。
import data from "./data.json";
export type AllowedKeys = keyof typeof data["someList"];
// This is equivalent to
// export type AllowedKeys = "#key1" | "#key2" | "#key3"
生成的d.ts
文件如下所示:
import data from "./data.json";
export declare type AllowedKeys = keyof typeof data["someList"];
据我所知,没有办法在Typescript中操纵字符串文字(即,删除#
)。
看到那些github问题:
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句