以下是代码,关于 naive-ui
可以删除, Record<string, { default: GlobalThemeOverrides } | unknown>
替换为 any
import type { GlobalThemeOverrides } from 'naive-ui'
// 根据 themes 文件夹内的输出结合 import.meta.glob 推断类型是 Record<string, { default: GlobalThemeOverrides }>
const modules = import.meta.glob('./themes/*.ts', { eager: true })
function formatImports(
modules: Record<string, { default: GlobalThemeOverrides } | unknown>,
result: ObjectAny
) {
Object.keys(modules).forEach((key) => {
const defaultModule = (modules[key] as ObjectAny).default
if (!defaultModule) return
const name = key.split('/').pop()?.replace('.ts', '')
result[name as string] = defaultModule
})
return result
}
// themes result
// result: { gray: {}, slate: {} }
// 需要进行类型生成
// type ThemeName = 'gray' | 'slate'
export const themes = formatImports(modules, {})
export const themeNames = Object.keys(themes)
export type ThemeName = (typeof themeNames)[number]
// type UnionOfArrayElements<T extends readonly string[]> = T[number]
// export type ThemeName = UnionOfArrayElements<typeof themeNames>
// 使用过以下方法进行类型推断,但都不能正确的推断字面量类型,似乎字面量类型推断只能是定义的数据而非生成的数据
// 如果你遇到了这个问题并且有解决办法,请求你能够像我分享相关解决办法,非常感谢!
//
// 1. as const
// export const themeNames = Object.keys(themes) as const
// export type ThemeName = (typeof themeNames)[number]
//
// 该方法会出现 TS 错误,因为 as const 不能被这样使用
// Error: 'const' 断言只能作用于枚举成员、字符串、数字、布尔值、数组或对象字面量。
//
// =========================================================================
//
// 2. 辅助类型推断
// type UnionOfArrayElements<T extends readonly string[]> = T[number]
// export type ThemeName = UnionOfArrayElements<(typeof themes)[keyof typeof themes]>
//
// 最终推断出来的是 'gray' 的类型(string),而不是将 'gray' 当成类型
import type { GlobalThemeOverrides } from 'naive-ui';
// 使用 import.meta.glob 导入所有主题模块
const modules = import.meta.glob('./themes/*.ts', { eager: true });
// 定义一个接口表示模块的类型
interface ThemeModule {
default: GlobalThemeOverrides;
}
// 强制类型转换,将 modules 的类型指定为 Record<string, ThemeModule>
const typedModules = modules as Record<string, ThemeModule>;
// 定义一个类型帮助函数,用于推断主题名称
function formatImports(
modules: Record<string, ThemeModule>,
result: Record<string, GlobalThemeOverrides>
) {
Object.keys(modules).forEach((key) => {
const defaultModule = modules[key].default;
const name = key.split('/').pop()?.replace('.ts', '');
if (name) {
result[name] = defaultModule;
}
});
return result;
}
// 生成 themes 对象
const themes = formatImports(typedModules, {});
// 获取主题名称的数组,并使用 as const 断言以确保是字面量类型
const themeNames = Object.keys(themes) as Array<keyof typeof themes>;
// 导出主题名称类型
export type ThemeName = (typeof themeNames)[number];
// 导出 themes 对象和 themeNames 数组
export { themes, themeNames };
ts 不负责运行时,你的 modules 只有运行之后才知道有什么文件
问题内容: 我正在考虑AJAX应用程序必须轮询轮询更新有多大限制,而最理想的是javascript能够建立与服务器的真正双向连接。我想知道是否存在将javascript与可以建立tcp连接的浏览器插件集成的方法,以便可以将数据传入和传出浏览器插件。 问题答案: 这是具有类似方法的实现: 套接字 它使用Java Applet,并将其API桥接到JavaScript,有趣的是… 这里是另一个: 套接字
问题内容: 我有一个index.php文件,可通过此javascript / ajax代码加载其他php文件: 因此,例如,我将通过以下方式在inxex.php中加载文件: 这会将“ contentpage.php”的内容粘贴到div“ updateThisDiv”中,但是现在如果我在“ contentpage.php”上有任何JavaScript,它将无法运行,有什么办法吗? 我已经看过了:ht
问题内容: 下面的方法完美无瑕 但是我没有指定此方法中的 是什么。编译器如何将 方法返回的值分配给 未指定类型i 的变量? 我只是测试了答案的有效性,指出了从该方法的返回类型推断出的答案。它似乎没有解决。请检查以下代码。它甚至不编译 再次修改源代码并对其进行测试,结果导致编译时错误 问题答案: 该方法如何推断类型 没有。泛型方法不推断其泛型类型-这就是为什么称为 类型参数 的原因。方法的 调用者
我通过安装了spark ~/miniconda3/envs/audience/lib/python3.6/site-packages/py4j/protocol.py in get_return_value(应答,gateway_client,target_id,name)318 Rise Py4JJavaError(319“调用{0}{1}{2}时出错.\n”。-->320格式(target_i
我已经尝试了。所有的失败都表明协议必须是HTTP或HTTPS。 Node有可用的FTP客户端(在npmjs上可用)。但是,根据他们的文档,他们需要创建一个到FTP服务器的连接,更改目录,然后下载它。 有什么简单的解决方法吗?
问题内容: 下面是我的代码: 这是我正在使用的脚本 如何返回上述代码以下载文件? 问题答案: 请尝试一下,以成功实现ajax 更新的答案: Ajax请求: