если в ней возможны несколько разных возвращаемых значений с разными типами. То есть, например
const Foo = (a: string): boolean | number => {
if (a === 'bar') {
return true
}
return 1
}
если я в пропсы компонента передам Foo('hello') то тайпскрипт поймет что я передаю в компонент проп типа number? или для него проп будет типа number | boolean ?
Зажми ctrl и наведи курсор на имя функции
ну, выводит const Foo: (a: string) => boolean | number
Это ответ на твой вопрос
а сделать как-то можно, чтоб при определенных условиях возвращался определенный тип?
const Foo = <T extends string>(a: T): T extends 'bar' ? boolean : number => a === 'bar' ? true : 1;
А, ща, это может быть неправдой
лучше писать код, поддающийся описанию, чем пытаться костылями описать неподдающийся
Правда
ну, задача переписать старый компонент.js на .ts вот и решаю возникшие проблемы)
Вот это неправильно, потому что Foo('' as string) будет возвращать number, а должен boolean | number
На твоём уровне опыта и знаний лучше не искать хаки, а пытаться структурировать код. Чистосердечный совет
Ну перепиши его, а не помажь сверху типами. Функция, которая неочевидным образом кардинально меняет своё поведение — херовая функция. Поэтому она плохо поддаётся статической типизации
какую задачу дали, такую и делаю)) конечно ,в команде есть опытные разрабы, но пока с ними обсуждения по этому повод не возникло. просто недостаток знаний в тсе не позволяет трезво спланировать действия с такими задачами
Ну так общайся с коллегами, консультируйся. Это и есть твоя работа
а почему неочевидным? возврат Promise с определенным типом по условию это неочевидное поведение?
Если функция принимает любую строку и возвращает промис с числом, НО если передать строку «я красивый» — вернётся промис с юзером. Это неочевидное поведение
Обсуждают сегодня