我想从数组元素的属性创建联合类型。如果数组是内联的,那么使用常量断言将非常简单。
const arr = [{ "name": "One" }, { "name": "Two" }] as const;
type name = typeof arr[number]["name"];
// name = "One" | "Two"
Run Code Online (Sandbox Code Playgroud)
请注意,没有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 (!)
Run Code Online (Sandbox Code Playgroud)
有没有办法可以在不扩展类型的情况下导入 JSON 文件?
下面的函数将每个数字打印两次。有人可以解释它是如何工作的吗?我尝试调试,但我所看到的是 的值i仅在每第二次迭代时增加。
async function run(then) {
for (let i = 1; i <= 10; i++) {
console.log(i);
then = await { then };
}
}
run(run);Run Code Online (Sandbox Code Playgroud)
具体来说,有两点我不明白。
i每次迭代都不增加?then = await { then };做什么的?我的第一个猜测是,它会等待嵌套异步调用run完成,然后再继续下一次迭代,但情况似乎并非如此。