Typescript接口接受错误的类型

时间:2018-11-25 20:15:01

标签: node.js typescript

我是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: {}});

2 个答案:

答案 0 :(得分:1)

套接字方法on仅接受通用函数,因此typescript不会在接收端报告错误。如果需要那种程度的类型检查,则扩展或委托套接字并编写一个类型安全包装器。

答案 1 :(得分:0)

您可能正在扩展EventEmitter,默认情况下,它的any参数是emit

无论何时使用any,都将有效地禁用类型检查。默认情况下,发出的内容与on捕获的内容之间也没有任何关系。

可以通过重载创建非常具体的onemit方法。例如,您可以这样定义emit方法:

emit: function(eventName: 'startData', startData: StartDataInterface);
emit: function(eventName: string...args: any) {
}

使用这样的签名,打字稿将知道如何为startData事件强制使用这些类型,但是您还必须在on方法上添加相同类型的重载签名。