#typescript
#typescript
Вопрос:
Это пример из книги «Программирование на машинописи» Бориса Черного:
type WarnUser = {
(warning: string): void
wasCalled: boolean
}
let warnUser: WarnUser = (warning: string) => {
if (warnUser.wasCalled) {
return
}
warnUser.wasCalled = true
alert(warning)
}
warnUser.wasCalled = false
У нас есть функция со свойством, которое будет добавлено после создания функции. Когда я помещаю этот код в игровую площадку TypeScript, TypeScript жалуется, что он wasCalled
отсутствует, но в книге говорится, что этого не должно быть:
Обратите внимание, что TypeScript достаточно умен, чтобы понять, что, хотя мы не присваивали
wasCalled
warnUser
ему значение при объявленииwarnUser
функции, мы назначилиwasCalled
его сразу после.
Что происходит?
Комментарии:
1. Игровая площадка TypeScript использует последнюю версию TypeScript; ваша книга, скорее всего, нет. Может быть частью этого.
2. Используйте
function
синтаксис, и вы получите полную поддержку от языка
Ответ №1:
Просто замените let warnUser
на const warnUser
, чтобы Typescript знал, что функция никогда не будет переопределена в другом месте.
type WarnUser = {
(warning: string): void
wasCalled: boolean
}
const warnUser: WarnUser = (warning: string) => {
if (warnUser.wasCalled) {
return
}
warnUser.wasCalled = true
alert(warning)
}
warnUser.wasCalled = false
Комментарии:
1. Достаточно справедливо, но если вы
function
, вам не нужен интерфейс. TypeScript позволит вам добавлять свойства к функциям, объявленным таким образом.