如何通过数据库在 TypeScript 类中定义属性?

Posted

技术标签:

【中文标题】如何通过数据库在 TypeScript 类中定义属性?【英文标题】:How to define properties in TypeScript class through the database? 【发布时间】:2021-11-05 01:19:33 【问题描述】:

这是我在 employee.ts

中定义属性时的错误

click

export class Employee 
    id:number;
    fname: string;
    lastName:string;
    emailId: string; 

&我遇到了这种错误

属性 'id' 没有初始化器,也没有明确分配 构造函数。

属性 'fname' 没有初始化器,也没有明确分配 构造函数。

属性“lastName”没有初始值设定项,也没有明确分配 在构造函数中。

属性“emailId”没有初始值设定项,也没有明确分配 在构造函数中。

这也是我的数据库 click

mysql> SELECT *
    -> FROM employees;
+----+-----------------+------------+-----------+
| id | email_id        | first_name | last_name |
+----+-----------------+------------+-----------+
|  1 | mara@gmail.com  | Amara      | Perera    |
|  2 | sadun@gmail.com | Sadun      | Fernando  |
+----+-----------------+------------+-----------+
2 rows in set (0.01 sec)

这是在 eclips IDE 上创建的 myY Employee.java 文件


import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;

@Entity
@Table(name = "employees")
public class Employee 
    
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private long id;
    
    @Column(name = "first_name")//column annotation to provide columns
    private String firstName;
    
    @Column(name = "last_name")
    private String lastName;
    
    @Column(name = "email_id")
    private String emailId;
    
    public Employee() 
        
    
    
    //generate constructor
    public Employee(String firstName, String lastName, String emailId) 
        super();
        this.firstName = firstName;
        this.lastName = lastName;
        this.emailId = emailId;
    
    public long getId() 
        return id;
    
    public void setId(long id) 
        this.id = id;
    
    public String getFirstName() 
        return firstName;
    
    public void setFirstName(String firstName) 
        this.firstName = firstName;
    
    public String getLastName() 
        return lastName;
    
    public void setLastName(String lastName) 
        this.lastName = lastName;
    
    public String getEmailId() 
        return emailId;
    
    public void setEmailId(String emailId) 
        this.emailId = emailId;
    
    
    
    


Enyone 可以帮我解决这个错误吗?

【问题讨论】:

【参考方案1】:

TypeScript 试图警告你这样的场景:

const employee = new Employee();

因为此时employee 中的所有属性都未定义,但您将它们定义为数字和字符串。您可以将属性设为可选,在构造函数中初始化它们或将以下内容添加到 tsconfig.json:

"strictPropertyInitialization": false

在 Java 中你没有这种类型的检查。

【讨论】:

“在 Java 中你没有 [this] 类型的检查。”好吧,您这样做了,但是在构造函数中分配了每个字段,因此问题得到了解决。 我在 Java 方面工作不多,但我不记得它有那种类型的检查。 Java 将让您没有构造函数,而只使用 setter。它不会警告您某个属性可能未正确初始化。因此空指针异常地狱:D【参考方案2】:

编译器看到缺少初始化代码的显式类型。您应该将字段标记为可能未定义

class Employee 
    id?: number;

或在构造函数中初始化它们

export class Employee 
    constructor(public readonly id: number)   

【讨论】:

以上是关于如何通过数据库在 TypeScript 类中定义属性?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 TypeScript 的类中使用元组

为啥我们不能在 TypeScript 类中定义一个 const 字段,为啥静态只读不起作用?

访问 TypeScript 中默认无名类中的静态属性

指令的angularjs typescript控制器类中未定义的范围变量

如何在 TypeScript 的派生类中进行构造函数重载?

Typescript Vuex - 如何使用 setter 和 getter 定义状态?