gpt4 book ai didi

arrays - 在 TypeScript 中将 JSON 文件导入为 const

转载 作者:行者123 更新时间:2023-12-04 11:36:38 47 4
gpt4 key购买 nike

我想从数组元素的属性创建联合类型。
如果数组是内联的,那么使用常量断言将非常简单。

const arr = [{ "name": "One" }, { "name": "Two" }] as const;

type name = typeof arr[number]["name"];
// name = "One" | "Two"

注意没有 as const型号 name变成等于 string ,这不是意图。

我面临的问题是数组是在单独的 JSON 文件中定义的。
我设置了 "resolveJsonModule": true在 TypeScript 选项中,以便我可以在我的模块中导入 JSON 文件。
但是随后编译器扩大了数组中所有属性的类型,因为没有 as const关于定义。
import * as arr from "./array.json";

type name = typeof arr[number]["name"];
// name = string (!)

有没有办法可以在不扩展类型的情况下导入 JSON 文件?

最佳答案

我也需要一个答案,然后意识到,“嘿,这不是一个难写的 npm 包。”
我不相信有一种纯粹的 TS 方法可以做到这一点。我创建的包名为 ts-json-as-const .

npm install -D ts-json-as-const
npx ts-json-as-const ./path/to/file.json ./path/to/second/file.json
示例 JSON 文件 ( example.json )
{
"foo": {
"bar": false,
"baz": true,
"i-can": "hascheezburger"
},
"array": [ 1, 2, 3, { "foo": 1, "bar": [ 4, 5 ] }, 6 ]
}
输出 example.json.d.ts
interface Example {
foo: {
bar: false;
baz: true;
'i-can': 'hascheezburger';
},
array: [
1,
2,
3,
{
foo: 1;
bar: [
4,
5
]
},
6
]
}

declare const Example: Example;

export = Example;
我承认,数组间距不是很好,但是谁会查看 .d.ts 文件的 json 文件呢?

关于arrays - 在 TypeScript 中将 JSON 文件导入为 const,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60281175/

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