首页 > 解决方案 > 禁用警告“属性类型在映射类型中循环引用自身”或解决方法

问题描述

我怎样才能在我的整个项目中禁用这种错误或者解决方法?

属性“UID”的类型在映射类型“部分”中循环引用自身。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

标签: javascriptvisual-studio-codetypeseslintjsdoc

解决方案


不知道为什么你也从未标记过这个 Typescript。:)

但是这里的类的一部分并没有多大意义,通常类型的事实来源是某种接口/类型,推断的类型当然只是从某种具体的类型推断出来的。这里你没有给你的类任何具体的类型,所以 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'})

推荐阅读