在我的应用程序中,我使用的是angular 7和ngx-mqtt包“ ngx-mqtt”:“ ^ 6.8.3”。该应用程序通过https运行,因此MQTT服务器上也使用了安全连接。
这是我的环境。ts
MQTTCONFIG: {
broker: 'theBroker',
hostname: 'theHostname',
**protocol: 'wss'**,
port: thePort,
username: 'theUsername',
password: 'thePassword',
path: 'thePath',
topic_query: 'theTopicQuery',
topic_update_state: 'theTopicUpdateState',
clientID: 'smartorder'
}
这是我的app.module.ts(省略了一些声明和导入):
import { MqttMessage, MqttModule, MqttServiceOptions } from 'ngx-mqtt';
.
.
@NgModule({
declarations: [
AppComponent
],
imports: [
BrowserModule,
FormsModule,
ReactiveFormsModule,
BrowserAnimationsModule,
AppRoutingModule,
MaterialModule,
LayoutModule,
MqttModule.forRoot(environment.MQTTCONFIG)
],
providers: [],
bootstrap: [AppComponent]
})
export class AppModule { }
我遇到以下错误:
ERROR in src/app/app.module.ts(62,24): error TS2345: Argument of type '{ broker: string; hostname: string; protocol: string; port: number; username: string; password: string; path: string; topic_query: string; topic_update_state: string; clientID: string; }' is not assignable to parameter of type 'IMqttServiceOptions'.
Types of property 'protocol' are incompatible.
Type 'string' is not assignable to type '"wss" | "ws"'.
第62行是这样的:MqttModule.forRoot(environment.MQTTCONFIG)
MQTT选项中的属性协议设置为“ wss”: 协议:“ wss”
如何纠正此错误?
答案 0 :(得分:0)
您正在使用的ngx-mqtt库对协议进行枚举。不幸的是,如果没有键入内容,您将无法在environment.ts中设置枚举值。
简单的解决方法: 从environment.ts中排除协议值,然后直接在app.module.ts中设置它,如下所示:
// environment.ts
MQTTCONFIG: {
broker: 'theBroker',
hostname: 'theHostname',
port: thePort,
username: 'theUsername',
password: 'thePassword',
path: 'thePath',
topic_query: 'theTopicQuery',
topic_update_state: 'theTopicUpdateState',
clientID: 'smartorder'
}
和
// app.module.ts
export const MQTT_SERVICE_OPTIONS: IMqttServiceOptions = {
broker: environment.MQTTCONFIG.broker,
connectOnCreate: true,
hostname: environment.MQTTCONFIG.hostname,
port: environment.MQTTCONFIG.port,
path: environment.MQTTCONFIG.path,
username: environment.MQTTCONFIG.username,
password: environment.MQTTCONFIG.password,
topic_query: environment.MQTTCONFIG.topic_query,
topic_update_state: environment.MQTTCONFIG.topic_update_state,
clientID: environment.MQTTCONFIG.clientID,
protocol: 'wss'
};
如果您确实想从您的environment.ts中使用该协议,则设置connectOnCreate: false
,并在构建时缺少的情况下,在构建后的 内从应用控制器内部加载协议,并且然后连接到代理。
答案 1 :(得分:0)
这是一个打字稿错误,您必须将类型从string
缩小到'ws' | 'wss'
。理想情况下,您不想重新定义硬编码的枚举类型,因此可以像这样对现有定义进行搭载:
{
...
protocol: 'wss' as IMqttServiceOptions['protocol'],
...
}