使用TypeScript创建MikroORM配置文件时遇类型错误求助
MikroORM配置TypeScript类型错误解决
配置代码
import { __prod__ } from './constants' import { Options, MikroORM } from '@mikro-orm/core' import path from 'path' const config: Options = { migrations: { path: path.join(__dirname, './migrations'), pattern: /^[\w-]+\d+\.[tj]s$/, }, entities: [Post], dbName: 'lireddit', user: 'postgres', password: 'StrongPassword', type: 'postgresql', debug: !__prod__, } as Parameters<typeof MikroORM.init>[0]; export default config;
报错信息
src/mikro-orm.config.ts:6:7 - error TS2322: Type 'Options<IDatabaseDriver<Connection>> | Configuration<IDatabaseDriver<Connection>> | undefined' is not assignable to type 'Options<IDatabaseDriver<Connection>>'.
问题原因
你同时给config变量指定了Options类型,又用as Parameters<typeof MikroORM.init>[0]做类型断言,但Parameters<typeof MikroORM.init>[0]的类型范围是Options | Configuration | undefined,比你指定的Options更宽泛,两者类型不兼容导致报错。另外代码中缺少Post实体的导入,这也是潜在问题。
解决方案
方案一:移除手动指定的类型,依赖断言或自动推断
import { __prod__ } from './constants' import { MikroORM } from '@mikro-orm/core' import path from 'path' // 补充Post实体的导入 import { Post } from './entities/Post' const config = { migrations: { path: path.join(__dirname, './migrations'), pattern: /^[\w-]+\d+\.[tj]s$/, }, entities: [Post], dbName: 'lireddit', user: 'postgres', password: 'StrongPassword', type: 'postgresql', debug: !__prod__, } as Parameters<typeof MikroORM.init>[0]; export default config;
方案二:使用断言对应的类型作为变量类型
import { __prod__ } from './constants' import { MikroORM } from '@mikro-orm/core' import path from 'path' import { Post } from './entities/Post' // 定义对应类型 type MikroORMConfig = Parameters<typeof MikroORM.init>[0]; const config: MikroORMConfig = { migrations: { path: path.join(__dirname, './migrations'), pattern: /^[\w-]+\d+\.[tj]s$/, }, entities: [Post], dbName: 'lireddit', user: 'postgres', password: 'StrongPassword', type: 'postgresql', debug: !__prod__, }; export default config;
内容的提问来源于stack exchange,提问作者Cyro Alves
相关产品推荐
相关产品推荐

