arm*_*nas 5 yaml config typescript
我想使用以下语法从 YAML 字段导入属性:
import { DATABASE_HOST, DATABASE_PORT} from 'my-config.yml';
Run Code Online (Sandbox Code Playgroud)
在幕后,我有代码可以解析 YML 并传递所需的正确值,因此这部分不是问题。
但是,我不确定如何声明模块来typings.d.ts支持这种语法。我已经尝试过这样做:
declare module '*.yml' {
const content: any;
export = content;
}
Run Code Online (Sandbox Code Playgroud)
它将允许这种语法,但这并不理想:
import config from 'my-config.yml';
console.log(config.DATABASE_HOST);
Run Code Online (Sandbox Code Playgroud)
也尝试过这个,但效果不佳:
declare module '*.yml' {
const content: any;
export = content;
}
Run Code Online (Sandbox Code Playgroud)
我尝试过另一件事,但这完全禁用了类型检查。我希望至少能够定义配置字段类型。
declare module '*.yml'
Run Code Online (Sandbox Code Playgroud)
在 ts 配置中,我启用了esModuleInterop和allowSyntheticDefaultImports。
我已经在顶部提到过这一点,但想再次澄清一下,我在将 YAML 导入 TS/JS 上下文时没有问题,问题只是正确地输入它。
我会推荐一种替代方法。您可以在同一文件夹中为每个 yml 文件生成一个 ts 文件,如下所示......
假设您可以生成一个名为的文件my-config.ts(记住它是 ts,而不是 d.ts)
import c from './my-config.yml';
export interface IMyConfig {
DATABASE_HOST: string,
DATABASE_POR: number
}
const myConfig: IMyConfig = c;
export default myConfig;
Run Code Online (Sandbox Code Playgroud)
您可以使用 gulp 或 grunt 通过查看 yml 文件来生成这些附加的 ts 文件。
用法
// this will load .ts
// which in turn will load the .yml
import myConfig from "my-config";
// you will get intellisense here...
Run Code Online (Sandbox Code Playgroud)
要么这样,要么你可以编写一个打字稿语言服务插件来提供声明,但这确实很耗时,生成 ts 文件是更简单的选择。
以下是有关语言服务插件的更多信息, https://github.com/microsoft/TypeScript/wiki/Writing-a-Language-Service-Plugin
对于小型一次性使用来说,插件并不是一个好主意,因为未来版本的 typescript 可能会破坏该插件,但您生成的 ts 文件将适用于未来版本,您可以轻松更改脚本以进行一些修改。
| 归档时间: |
|
| 查看次数: |
4420 次 |
| 最近记录: |