禁用警告 'Type of property circularly references itself in mapped type' 或解决方法
Disable waring 'Type of property circularly references itself in mapped type' or workaround
我如何才能在我的整个项目中禁用此类错误或解决方法?
Type of property 'UID' circularly references itself in mapped type
'Partial'.ts(2615)
这里是 js 和 vscode 的问题。
如果我说数据类型是 /** @param {A} [data] */
错误来自 new A({})
个实例,我需要完全填充部分对象,否则我会收到 linter 错误!
如果我说数据类型是部分 obj /** @param {Partial<A>} [data] */
,现在 new A({})
工作正常,但构造函数出现 linter 错误!
如果我说 /** @param {A|Partial<A>} [data] */
,就不会再出错了!但是所有道具都变得未定义(任何)并且丢失了类型!
Vscode IntelliSense 在这种情况下似乎有点迷失。 !
这里是一个示例代码,我怎么能说数据是一个部分对象,但如果没有,默认设置!!!!
测试用例: /** @param {A} [data]*/
- /** @param {Partial<A>} [data] */
- /** @param { A | Partial<A>} [data] */
export class A {
/** @param {Partial<A>} [data] */ // how say is partial and also default ?
constructor(data) {
/** uid global du data */
this.UID = data.UID || 'noUID';
this.prop = data.prop || {};
}
get VIEW() {
return this.constructor.name;
}
}
const a = new A ({UID:'g42t'})
感谢您的帮助或建议,
我想要一个有效的解决方案,它允许有一个良好的工作流程,没有重复
我也在这里打开问题,如果是错误?
https://github.com/microsoft/vscode/issues/108062
不确定为什么你从来没有标记这个打字稿。 :)
但是这里的 class 的一部分并没有多大意义,通常类型的真实来源是某种接口/类型,推断类型当然只能从某种具体类型推断出来.在这里你没有给你的 class 任何具体类型,所以 Typescript 会尝试推断并且会因为明显的原因而失败,但即使没有,它也不会很有用,例如。它将有一个 readonly VIEW()
不是我认为你想要的东西,你真的想要能够发送一个可选的 readonly View()
吗??。
所以简单的解决方案,只需提供您期望的类型的数据。
例如
export class A {
/** @param {{UID?:string, prop?:object}} [data] */
constructor(data) {
/** uid global du data */
this.UID = data.UID || 'noUID';
this.prop = data.prop || {};
}
get VIEW() {
return this.constructor.name;
}
}
const a = new A ({UID:'g42t'})
ok 解决了,intellisense 可以很好地处理这种结构。谢谢大家
看起来有点难看,但它很好,所有父扩展构造函数都可以访问。
export class A {
/**@readonly - UID ...desc */
UID = UTILITY.create_UID();
/**@readonly - UID2 ...desc */
UID2 = '';
/** @param {Partial<Omit<A, 'UID'>>} [data] */
constructor(data,{UID2}=data) {
this.UID2 = UID2 || 'perform default thing...';
}
}
const a = new A ({UID2:'sada'}); // intellisence will not suggest UID here :)
我如何才能在我的整个项目中禁用此类错误或解决方法?
Type of property 'UID' circularly references itself in mapped type 'Partial'.ts(2615)
这里是 js 和 vscode 的问题。
如果我说数据类型是 /** @param {A} [data] */
错误来自 new A({})
个实例,我需要完全填充部分对象,否则我会收到 linter 错误!
如果我说数据类型是部分 obj /** @param {Partial<A>} [data] */
,现在 new A({})
工作正常,但构造函数出现 linter 错误!
如果我说 /** @param {A|Partial<A>} [data] */
,就不会再出错了!但是所有道具都变得未定义(任何)并且丢失了类型!
Vscode IntelliSense 在这种情况下似乎有点迷失。 !
这里是一个示例代码,我怎么能说数据是一个部分对象,但如果没有,默认设置!!!!
测试用例: /** @param {A} [data]*/
- /** @param {Partial<A>} [data] */
- /** @param { A | Partial<A>} [data] */
export class A {
/** @param {Partial<A>} [data] */ // how say is partial and also default ?
constructor(data) {
/** uid global du data */
this.UID = data.UID || 'noUID';
this.prop = data.prop || {};
}
get VIEW() {
return this.constructor.name;
}
}
const a = new A ({UID:'g42t'})
感谢您的帮助或建议,
我想要一个有效的解决方案,它允许有一个良好的工作流程,没有重复
我也在这里打开问题,如果是错误? https://github.com/microsoft/vscode/issues/108062
不确定为什么你从来没有标记这个打字稿。 :)
但是这里的 class 的一部分并没有多大意义,通常类型的真实来源是某种接口/类型,推断类型当然只能从某种具体类型推断出来.在这里你没有给你的 class 任何具体类型,所以 Typescript 会尝试推断并且会因为明显的原因而失败,但即使没有,它也不会很有用,例如。它将有一个 readonly VIEW()
不是我认为你想要的东西,你真的想要能够发送一个可选的 readonly View()
吗??。
所以简单的解决方案,只需提供您期望的类型的数据。
例如
export class A {
/** @param {{UID?:string, prop?:object}} [data] */
constructor(data) {
/** uid global du data */
this.UID = data.UID || 'noUID';
this.prop = data.prop || {};
}
get VIEW() {
return this.constructor.name;
}
}
const a = new A ({UID:'g42t'})
ok 解决了,intellisense 可以很好地处理这种结构。谢谢大家
看起来有点难看,但它很好,所有父扩展构造函数都可以访问。
export class A {
/**@readonly - UID ...desc */
UID = UTILITY.create_UID();
/**@readonly - UID2 ...desc */
UID2 = '';
/** @param {Partial<Omit<A, 'UID'>>} [data] */
constructor(data,{UID2}=data) {
this.UID2 = UID2 || 'perform default thing...';
}
}
const a = new A ({UID2:'sada'}); // intellisence will not suggest UID here :)