TypeScript — мощный язык, обеспечивающий статическую типизацию в JavaScript. Хотя это помогает обнаружить множество ошибок во время компиляции, вы можете столкнуться с ужасной ошибкой «Свойство «drawId» не существует для типа «неизвестно». В этой статье блога мы рассмотрим несколько способов устранения этой ошибки и приведем практические примеры кода.
Метод 1: утверждение типа
Один из способов обработки ошибки «Свойство drawId не существует для типа «неизвестно»» — использовать утверждение типа. Утверждение типа позволяет сообщить компилятору TypeScript конкретный тип переменной, если тип не может быть определен автоматически. Вот пример:
const data: unknown = { drawId: 123 };
if ((data as any).drawId) {
// Access the property drawId safely
console.log((data as any).drawId);
} else {
console.log("Property 'drawId' does not exist");
}
В приведенном выше фрагменте кода мы используем ключевое слово asдля временного подтверждения типа any. Таким образом, мы можем получить доступ к свойству drawIdбез возникновения ошибки компиляции.
Метод 2. Типовая защита
Другой подход — использовать защиту типа. Защита типа — это условные операторы, которые сужают тип переменной в определенном блоке кода. Давайте посмотрим пример:
function isObjectWithDrawId(data: unknown): data is { drawId: number } {
return (data as any).drawId !== undefined;
}
const data: unknown = { drawId: 123 };
if (isObjectWithDrawId(data)) {
// Access the property drawId safely
console.log(data.drawId);
} else {
console.log("Property 'drawId' does not exist");
}
В этом методе мы определяем функцию isObjectWithDrawIdкак защиту типа. Он проверяет, существует ли свойство drawIdв объекте data. Если это так, TypeScript сужает тип dataдо { drawId: number }в истинной ветви оператора if, обеспечивая безопасный доступ к свойству.
Метод 3: утверждение типа с необязательной цепочкой
Начиная с TypeScript 3.7, вы можете комбинировать утверждение типа с необязательным связыванием, чтобы более лаконично обрабатывать эту ошибку. Необязательная цепочка позволяет получить доступ к вложенным свойствам, не вызывая ошибки, если какое-либо промежуточное свойство неопределенно или имеет значение NULL. Вот пример:
const data: unknown = { drawId: 123 };
if ((data as any)?.drawId) {
// Access the property drawId safely
console.log((data as any).drawId);
} else {
console.log("Property 'drawId' does not exist");
}
Использование (data as any)?.drawIdгарантирует, что код не выдаст ошибку, если dataне определено или равно нулю. Если drawIdсуществует, доступ к свойству безопасен, в противном случае мы обрабатываем отсутствие свойства соответствующим образом.
Обнаружение ошибки «Свойство drawId не существует для типа «неизвестный»» в TypeScript может расстроить, но, вооружившись упомянутыми выше методами, вы будете хорошо подготовлены к ее устранению. Независимо от того, выбираете ли вы утверждение типа, защиту типа или их комбинацию, вы можете безопасно получить доступ к свойствам переменных неизвестных типов. Не забывайте использовать эти методы разумно и учитывать конкретные требования вашей кодовой базы.
Поняв и внедрив эти методы, вы обеспечите типобезопасность вашего кода и сведете к минимуму ошибки во время выполнения.