我在TS中有代码
interface Context {
out: vscode.OutputChannel,
myPorts: number[]
}
const outputChannel = vscode.window.createOutputChannel('my-run');
const ctx = {
out: OutputChannel,
myPorts: []
} as Context;
我收到错误信息,禁止在对象文字上进行类型断言,请改用类型注释。tslint(no-object-literal-type-assertion
答案 0 :(得分:1)
This rule禁止使用as
注释类型。相反,您应该使用类型注释var: type
语法,如:
const ctx: Context = {
out: OutputChannel,
myPorts: []
};
在某些情况下,该语法可能会引发一些错误,然后您可能需要使用any
将对象文字转换为as any
(实际上是该规则允许的):
const ctx: Context = {
out: OutputChannel,
myPorts: []
} as any;
现在,我不确定您是否在询问如何使您的代码符合规则(我已经回答了),还是为什么首先出现警告。如果是这样,这取决于您的tslint配置,如果您的配置不是标准的,则可能需要提供一些额外的信息。如果是这样,则必须在tslint.json
文件中添加:
no-object-literal-type-assertion: false
至json的rules
字段。
答案 1 :(得分:1)
您可以通过将对象强制转换为unknown
来绕过no-object-literal-type-assertion规则,然后再将其分配给其他类型。
示例:
const ctx = {
out: OutputChannel,
myPorts: []
} as unknown as Context;