我刚开始接触TypeScript,所以简单的事情还是会让我感到困惑。我使用下面的代码成功地创建了一个数据库连接,它不在一个类中:
const mysql = require('mysql2');
let connection = mysql.createConnection({
host: '127.0.0.1',
user: 'root',
password: 'myPW',
database: 'myDb'
});
connection.connect(function(err: any) {
if (err) {
return console.error('error: ' + err.message);
}
console.log('Connected to the MySQL server.');
});一切都很好。然后,我将相同的代码放入这样的类中:
const mysql = require('mysql2');
export class Server {
constructor() { }
connection = mysql.createConnection({
host: '127.0.0.1',
user: 'root',
password: 'myPW',
database: 'myDb'
});
connection.connect(function(err: any) {
if (err) {
return console.error('error: ' + err.message);
}
console.log('Connected to the MySQL server.');
});
}我发现了这些错误:

下面的错误来自第13行的红色错误。
重复标识符‘连接’。意外的记号。需要构造函数、方法、访问器或属性。没有返回类型注释的“‘connect”隐式地具有“任意”返回类型。“函数”不允许作为参数名。重复功能实现。
有人能解释一下我做错了什么吗?
谢谢。
发布于 2022-07-19 19:47:48
这是因为connection.connect部件属于类的构造函数。写这个的一个更好的方法是
import * as mysql from 'mysql2';
export class Server {
public readonly connection: mysql.Connection;
constructor() {
this.connection = mysql.createConnection({
host: '127.0.0.1',
user: 'root',
password: 'myPW',
database: 'myDb'
});
this.connection.connect(function(err: any) {
if (err) {
return console.error('error: ' + err.message);
}
console.log('Connected to the MySQL server.');
});
}
}这会将逻辑移动到构造函数中,而构造函数正是逻辑应该存在的位置。将代码放入类主体将引发错误。
如果您想使用这个类,您可以这样做:
const server = new Server();
server.connection.query(...);还请注意,我已经将require调用转换为import,这是在类型记录中推荐的方法。
https://stackoverflow.com/questions/73042643
复制相似问题