[英]How can I build a Typescript string literal type with an imported array?
在我的配置文件config.js
文件之一中,我有:
module.exports = {
locales: ['en', 'fr']
}
在我的库中,我尝试导入config.js
文件并将其转换为 typescript 自由类型,如下所示:
import config from "config.js"
const tempDefaultLocales = [...config.locales] as const
export type Language = typeof tempDefaultLocales[number]
但是Language
的类型是string
而不是"en" | "fr"
"en" | "fr"
如果我不导入而只是硬输入它,那么as const
就可以工作。 例子:
const locales = ["en","fr"] as const
type Language = typeof locales[number]
给我正确的"en" | "fr"
"en" | "fr"
知道如何在不将我的配置文件更改为ts
或对其进行硬编码的情况下完成这项工作吗?
这是一个沙箱: https://codesandbox.io/s/awesome-swirles-ij4qsg?file=/src/App.tsx
PS:我无法将配置更改为ts
,因为配置文件实际上是next.config.js
,他们不允许我们更改它,我想避免使用 2 个配置文件来设置我的语言。 谢谢
将导出的 object 定义为常量。 这里的工作示例。
module.exports = {
locales: ['en', 'fr']
} as const
as const
不“传播”。 您不能在其他地方定义另一个不是 const 的变量,然后假设它会将其视为一个变量,因为源数据中缺少as const
保证,因此 typescript 不能保证它不会更改或添加到一些其他代码。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.