Size: a a a

TypeScript — русскоговорящее сообщество

2020 March 20

A

Alex CherryTea in TypeScript — русскоговорящее сообщество
но вобще да ошибка странная
источник

🧨

🧨 ethorz in TypeScript — русскоговорящее сообщество
не помогло
источник

🧨

🧨 ethorz in TypeScript — русскоговорящее сообщество
вот сам тип
источник

A

Alex CherryTea in TypeScript — русскоговорящее сообщество
а закиньте в песочницу пожалуйста
источник

🧨

🧨 ethorz in TypeScript — русскоговорящее сообщество
источник

НС

Николай Ступак in TypeScript — русскоговорящее сообщество
Всем привет. Пытаюсь разобраться с дженериками и сейчас столкнулся с такой проблемой:

// Тип описывает параметры поля какой-либо формы. 
// T это тип значения поля, V это тип описывающий все значения формы
interface Field<T, V> {
   name: string;
   type: string;
   validate: (value: T | null | undefined, allValues: V) => boolean;
}

// Это конкретный тип для строковых полей
interface StringField<T> extends Field<string, T> {
   type: 'string',
}

// Это конкретный тип для числовых полей
interface NumberField<T> extends Field<number, T> {
   type: 'number',
}

// Это тип описывающий список полей какой-либо формы
type Fields<T> = Field<any, T>[]


Теперь я создаю поля для конкретной формы:

i
nterface Person {
   name: string;
   age: number;
}

const nameField: StringField<Person> = {
   name: 'name',
   type: 'string',
   validate: (value: string | null | undefined, allValues: Person): boolean => {
       return value != null && value !== '';
   },
}

const ageField: NumberField<Person> = {
   name: 'age',
   type: 'number',
   validate: (value: number | null | undefined, allValues: Person): boolean => {
       return value != null && value > 0;
   },
}

// В этом случае я ожидаю список полей для формы Person, и все поля имеют соответствующий дженерик.
// Тут я не ожидаю ошибок и их нет.
const fields: Fields<Person> = [nameField, ageField];

Далее я хочу убедиться, что если я укажу неправильный дженерик для поля, то TypeScript ругнется:

inte
rface City {
   name: string;
}

// Намеренно указываю в качестве дженерика тип City вместо Person
const incorrectAgeField: NumberField<City> = {
   name: 'age',
   type: 'number',
   validate: (value: number | null | undefined, allValues: City): boolean => {
       return value != null && value > 0;
   },
}

// Тут я хочу чтобы TypeScript ругнулся ошибкой, что-то типа такого:
// "incorrectAgeField must be Field<any, Person> but it is Field<any, City>".
// Но ошибок нет и TypeScript считает что это корректное выражение.
const incorrectFields: Fields<City> = [nameField, incorrectAgeField];

По
дскажите почему TypeScript не ругается, и как мне реализовать то поведение которое я хочу?
источник

A

Alex CherryTea in TypeScript — русскоговорящее сообщество
у вас в TSearchbarCustomContent указано что он опциональный
источник

A

Alex CherryTea in TypeScript — русскоговорящее сообщество
источник

🧨

🧨 ethorz in TypeScript — русскоговорящее сообщество
да, но я проверяю ведь на undef
источник

🧨

🧨 ethorz in TypeScript — русскоговорящее сообщество
мне и нужно, чтобы он был опциональным
источник

🧨

🧨 ethorz in TypeScript — русскоговорящее сообщество
может быть либо left, либо right, либо оба присутствовать в объекте
источник

A

Alex CherryTea in TypeScript — русскоговорящее сообщество
пахоже на баг
источник

🧨

🧨 ethorz in TypeScript — русскоговорящее сообщество
да уж)
источник

A

Alex CherryTea in TypeScript — русскоговорящее сообщество
🧨 ethorz
да уж)
источник

🧨

🧨 ethorz in TypeScript — русскоговорящее сообщество
интересненько
источник

🧨

🧨 ethorz in TypeScript — русскоговорящее сообщество
спасибо
источник

A

Alex CherryTea in TypeScript — русскоговорящее сообщество
но вы ишью все равно откройте
источник

VP

Viktor Petevotov in TypeScript — русскоговорящее сообщество
Alex CherryTea
пахоже на баг
а что вас там удивляет?
источник

A

Alex CherryTea in TypeScript — русскоговорящее сообщество
Viktor Petevotov
а что вас там удивляет?
то что внутри ифа он все еще видит ситуацию при которой там окажется undefined
источник

VP

Viktor Petevotov in TypeScript — русскоговорящее сообщество
Alex CherryTea
то что внутри ифа он все еще видит ситуацию при которой там окажется undefined
источник