#javascript #visual-studio-code #types #eslint #jsdoc
#javascript #typescript #visual-studio-code #eslint #jsdoc
Вопрос:
как я могу отключить такого рода ошибки во всем моем проекте или, может быть, обойти их?
Тип свойства ‘UID’ циклически ссылается на себя в сопоставленном типе ‘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
Ответ №1:
Не уверен, почему вы никогда не помечали этот машинописный текст. 🙂
Но частичная часть класса здесь на самом деле не имеет особого смысла, обычно источником истины является какой-то интерфейс / тип, предполагаемые типы, конечно, выводятся только из какого-то конкретного типа. Здесь вы не указали своему классу какие-либо конкретные типы, поэтому 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'})
Комментарии:
1. Хм, это то, чего я хотел избежать!, набираю все intellisenses вручную в jsdoc. Плохо для (рабочего процесса) и требует повторного кода. Но я нашел чудесное решение, в котором все работает почти автоматически. !
/** @param {Partial<Omit<A, 'UID'>>} [data] */
и затем добавьте значение по умолчанию в общедоступное пространство и пометьте/**@readonly - UID */
, если необходимо!. Кажется, теперь все работает нормально! спасибо за ваше время.2. я не могу пометить typescript, потому что это максимум 5 тегов, поэтому извините, я не могу это исправить.
3. @jon Я бы удалил типы и вставил typescript. Я думаю, у вас было бы больше ответов от сообщества typescript, чем только у меня.
Ответ №2:
хорошо решено, 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 :)
Комментарии:
1. Я немного смущен тем, что это должно решить !!, был ли ПРОСМОТР пропал?. Почему у нас теперь есть UID2. этот код не похож на оригинал. TS жалуется на меня: (
2. @Keith Я согласен, и мне жаль, если я не понял свою проблему, если бы я скопировал исходный код, люди жаловались бы на сокращение кода 🙂 , и, к сожалению, это самая простая версия моей структуры, которую я могу предоставить. И извините
VIEW
, что это не имеет к этому никакого отношения, это было временное исправление, потому что в настоящее время я конвертирую весь свой проект в React и Store proxy. Так что здесь есть немного странный код. На самом деле, используя какой-то хак, смешанный с публичной, частная структура работает нормально! developer.mozilla.org/en-US/docs/Web/JavaScript/Reference /…