【问题标题】:Unable to assign the type unknown to an entity with typeorm无法使用 typeorm 将未知类型分配给实体
【发布时间】:2019-12-10 12:38:31
【问题描述】:

我在将 TypeOrm 与 typescript 用于特定项目时遇到问题。打字稿似乎无法识别来自 typeorm 实体的类型。

@Entity({
name: "users",
  synchronize: false
})
export default class User {

  private tempPassword:string | undefined;

  @PrimaryGeneratedColumn()
  id!: number;

  @Column({
    type: "text"
  })
  name!: string;
...
}

上面的代码是我的模型。所以当我尝试时:

let user: UserModel;
try {
  user = await getRepository("User").findOne({name: "test"});

我在用户变量上有以下错误:

(这意味着:无法将未知类型分配给类型用户)

tsconfig.json

{
  "compilerOptions": {
    /* Basic Options */
    // "incremental": true,                   /* Enable incremental compilation */
    "target": "ES2018",                          /* Specify ECMAScript target version: 'ES3' (default), 'ES5', 'ES2015', 'ES2016', 'ES2017', 'ES2018', 'ES2019' or 'ESNEXT'. */
    "module": "commonjs",                     /* Specify module code generation: 'none', 'commonjs', 'amd', 'system', 'umd', 'es2015', or 'ESNext'. */
    "sourceMap": true,                     /* Generates corresponding '.map' file. */
    "outDir": "build",                        /* Redirect output structure to the directory. */
    "rootDir": "./src",                       /* Specify the root directory of input files. Use to control the output directory structure with --outDir. */

    /* Strict Type-Checking Options */
    "strict": true,                           
    "esModuleInterop": true,                   

    /* Experimental Options */
    "experimentalDecorators": true,        /* Enables experimental support for ES7 decorators. */
    "emitDecoratorMetadata": true,         /* Enables experimental support for emitting type metadata for decorators. */
    "resolveJsonModule": true,
  },
  "include": [
    "src/**/*.ts"
  ],
  "exclude": [
    "node_modules"
  ],
}

是因为 tsconfig json 中缺少某些内容吗?非常感谢

【问题讨论】:

    标签: typescript typeorm


    【解决方案1】:

    您有strict: true,这意味着您还必须检查null / undefined

    let user: UserModel | undefined;

    编辑:

    我认为getRepository(string) 签名返回unknown(如果需要,您可以断言其结果 - as User)。试试看,getRepository(User)...

    【讨论】:

    • 感谢您的回答。即使它现在让我得到错误“无法将未知类型分配给类型用户|未定义。然后我在删除严格模式后尝试,现在我有“类型'{}'缺少类型'用户'中的以下属性: id, name.ts(2740)
    • 您可以在尝试获取时描述存储库类型。 getRepository("User").findOne 或者直接通过 User.getRepository().findOne 访问仓库
    猜你喜欢
    • 1970-01-01
    • 2022-01-15
    • 2014-12-03
    • 1970-01-01
    • 2017-10-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多