输入'文章| null' 不可分配给类型 'void'

问题描述

我正在尝试使用 typescript 将接口实现到类中。

这是我的课:

import connector from '../../../../common/MysqL.persistence'
import { Article } from '../../domain/article'
import { ArticleRepository } from '../../article.repository'

export class ArticleMysqLRepository implements ArticleRepository {
  public async all(): Promise<Article[]> {
    const [rows] = await connector.execute(
      'SELECT * FROM articles ORDER BY id DESC'
    )

    return rows as Article[]
  }

  public async find(id: Number): Promise<Article | null> {
    const [rows]: any[] = await connector.execute(
      'SELECT * FROM articles WHERE id = ?',[id]
    )

    if (rows.length) {
      return rows[0] as Article
    }

    return null
  }

  public async store(entry: Article): Promise<void> {
    const date = new Date()
    const likes:number = 0
    const shares:number = 0
    
    await connector.execute(
      'INSERT INTO article(id,title,slug,description,content,likes,shares,updatedAt,createdAt) VALUES(?,?,?)',[entry.id,entry.title,entry.slug,entry.description,entry.content,null,date ]
    )
  }

  public async update(entry: Article): Promise<void> {
    const date = new Date()

    await connector.execute(
      'UPDATE article SET title = ?,slug = ?,description = ?,content = ?,updatedAt = ? WHERE id = ?',[entry.title,date,entry.id]
    )
  }

  public async remove (id: Number): Promise<void> {
    await connector.execute(
        'DELETE FROM article WHERE id = ?',[id]
      )
  }
}

然后是我的界面:

import { Article } from './domain/article'

export interface ArticleRepository {
  all(): Promise<Article[]>
  find(id: Number):Promise<Article | null>
  store(entry: Article):Promise<void>
  update(entry: Article):Promise<void>
  find(id: Number): Promise<void>
}

对于我想要实现的任何其他存储库,我需要遵循该接口。顺便说一句,编辑器在 find 方法显示错误

'ArticleMysqLRepository' 类型中的属性 'find' 不可分配给 基本类型“ArticleRepository”中的相同属性。输入 '(id: Number) => 承诺' 不可分配给类型 '{ (id: 编号):承诺; (id: Number): 承诺; }'。 输入'承诺' 不可分配给类型 'Promise'。 输入'文章| null' 不可分配给类型 'void'。 类型 'null' 不能分配给类型 'void'.t

我需要在 tsconfig 上更改任何设置吗?

解决方法

啊,我一开始没发现,但你的接口定义了 find() 两次:

export interface ArticleRepository {
  all(): Promise<Article[]>
  find(id: Number):Promise<Article | null> // defined here
  store(entry: Article):Promise<void>
  update(entry: Article):Promise<void>
  find(id: Number): Promise<void> // defined here
}

你可能想去掉最后一个。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...