У меня есть интерфейс, определенный с некоторыми свойствами. При попытке получить доступ к службе я получаю эту ошибку: тип «неопределенный» не может быть назначен в файле отображения в this.isOpen. Мне нужна помощь, чтобы решить эту ошибку.
Примечание. Я не могу установить значения в файле конфигурации, такие как "strictNullChecks":false
Интерфейс
export interface DataFile {
file?: DataFile[];
location: string;
}
Класс машинописного текста
isOpen?: DataFile;
Scan(aero: string, TeamClass: string) {
if (TeamClass === 'Hawkins') {
if (this.redService.name.file && this.redService.name.file.length > 0) {
this.isOpen = this.redService.name.file.filter((data: DataFile) => data.location == aero[0])[0];
}
}
this.displayfile(this.isOpen).then(async () => { ----->>>>>> Error at this.isOpen
//rest of the functionality
}
}
});
}
Я получаю ошибку-
Argument of type 'DataFile | undefined' is not assignable to parameter of type
'DataFile'.
Type 'undefined' is not assignable to type 'DataFile'.
В качестве альтернативы, если this.isOpen никогда не бывает неопределенным, вам нужно исправить его ввод на isOpen: DataFile;
Если я ставлю isOpen: DataFile;, то получаю эту ошибку Property 'isOpen' has no initializer and is not definitely assigned in the constructor.ts(2564)





Установив isOpen со знаком вопроса, он выбирает два типа: DataFile (ваш тип) и undefined. Это основная причина, по которой Typescript сообщает об ошибке.
Чтобы решить эту проблему, у вас есть два варианта:
isOpen данными, т.е.:if (!isOpen) { /* do something */ }
...rest of code
isOpen добавьте ! (т. е. this.isOpen!), чтобы тип не был неопределенным. Не рекомендуется, потому что, если он действительно не определен, вы столкнетесь с ошибками внутри вашей функции this.displayfile.Ссылка на оператор вопросительного знака здесь: https://www.geeksforgeeks.org/why-use-question-mark-in-typescript-variable/
Вы имеете в виду что-то вроде if (!isOpen) {this.displayfile(this.isOpen).then(async () => { - //rest of the functionality}}}); }, обернуть !isOpenусловие вокруг файла отображения?
Скорее, if (!isOpen) // don't continue with the functionality. Контекст восклицательного знака здесь является оператором НЕ.
Итак, в моем случае я хочу if (isOpen) {this.displayfile(this.isOpen).then(async () => { - //rest of the functionality}}}); } Верно?
Это другой способ, да. Шаблон, который я рекомендую, является скорее защитным предложением, то есть мы сначала проверяем, существует ли он. Learningactors.com/…
Настоящий вопрос здесь заключается в том, что вы хотите сделать, если
this.isOpenэтоundefined? Прямо сейчас вы передаете егоthis.displayfile, ноthis.displayfileне допускает аргументundefined.