#typescript
#typescript
Вопрос:
Сообщение TypeScript было правильным ОБНОВЛЕНИЕ:, типом возвращаемого значения этой функции может быть пустая строка.
Приведенный ниже фрагмент не будет компилироваться в TypeScript с strictNullCheck
опцией.
Код правильный, но TS ошибочно выводит, что это (id) => id amp;amp; /^[a-z0-9-] $/.test(id)
выражение может возвращать среди других значений пустую строку ''
и жалуется.
type Validators<D> = {
[K in keyof D]: (value: D[K] | undefined) => true | false | undefined
}
interface Post {
id?: string
}
const validators: Validators<Post> = {
// Complains about this line
id: (id) => id amp;amp; /^[a-z0-9-] $/.test(id)
}
<a rel="noreferrer noopener nofollow" href="https://www.typescriptlang.org/play/#src=type Validators = {
[K in keyof D]: (value: D[K] | undefined) => true | false | undefined
}
interface Post {
id?: string
}
const validators: Validators = {
id: (id) => id && /^[a-z0-9-]+$/.test(id)
}» rel=»nofollow noreferrer»>Игровая площадка
Комментарии:
1. но это выражение будет возвращать пустую строку, если
id
это пустая строка2. @artem спасибо, вы правы, я этого не осознавал
Ответ №1:
Небольшой трюк, которому я научился некоторое время назад, чтобы утверждать ненулевые значения, заключается в выполнении double !!
.
type Validators<D> = {
[K in keyof D]: (value: D[K] | undefined) => true | false | undefined
}
interface Post {
id?: string
}
const validators: Validators<Post> = {
id: (id) => !!id amp;amp; /^[a-z0-9-] $/.test(id)
}
Этот код не жалуется, но в чем он не уверен, так это в id
переменной. Поступая !!id
, вы утверждаете, что это ложь, а затем переворачиваете его, чтобы, по сути, подтвердить его «правдивость».