我是Typescript的新手。我被困在接口部分。我使用Node.js从客户端向服务器发送一个名为startData
的对象。该对象包含一个ID和用户名。我正在使用接口定义此对象中的类型。我将testId定义为数字,并将Username定义为字符串。
但是,当我将testId作为字符串发送而将Username作为对象发送时,不会引发任何错误。为什么接口接受错误的类型?我希望它会引发某种意外的类型错误。
interface startDataInterface{
testId: number;
username: string;
}
socket.on('startData', function(startData: startDataInterface) {
...
我正在客户端发送此邮件
socket.emit('startData', {testId: "string", username: {}});
答案 0 :(得分:1)
套接字方法on
仅接受通用函数,因此typescript
不会在接收端报告错误。如果需要那种程度的类型检查,则扩展或委托套接字并编写一个类型安全包装器。
答案 1 :(得分:0)
您可能正在扩展EventEmitter,默认情况下,它的any
参数是emit
。
无论何时使用any
,都将有效地禁用类型检查。默认情况下,发出的内容与on
捕获的内容之间也没有任何关系。
可以通过重载创建非常具体的on
和emit
方法。例如,您可以这样定义emit
方法:
emit: function(eventName: 'startData', startData: StartDataInterface);
emit: function(eventName: string...args: any) {
}
使用这样的签名,打字稿将知道如何为startData
事件强制使用这些类型,但是您还必须在on
方法上添加相同类型的重载签名。