Size: a a a

$mol: Разработка

2021 November 29

ДК

Дим К in $mol: Разработка
10
источник

SY

Sergey Yuferev in $mol: Разработка
также, если что я тут кликал
источник

SY

Sergey Yuferev in $mol: Разработка
походу меня забанили на tinyurl
источник

ДК

Дим К in $mol: Разработка
Это я понял по ссылке. Не тебя, а ссылку эту банит. Другой код не банит.
источник

ДК

Дим К in $mol: Разработка
Залил.
источник

ДК

Дим К in $mol: Разработка
Погонял бенчмарки - перфоманс немного просел. Эх.
источник

SY

Sergey Yuferev in $mol: Разработка
из-за чего?
источник

ДК

Дим К in $mol: Разработка
Пока не понятно. Скорее всего хуже джитится.
источник

В

Виктор in $mol: Разработка
Всем привет. Может кто подсказать, можно ли использовать тайп алиасы внутри функции, если они объявлены в интерфейсе?

interface Foo {
 bar: <T>(baz: string) => T
}

const a: Foo = {
 bar: (baz) => {
   return "some shit" as T // << вот тут нужен T тип
 }
}


если указать <T> перед функцией при создании интерфейса, пропадает тип baz переменной (implicit any)
источник

ДК

Дим К in $mol: Разработка
interface Foo {
 bar: <T extends string>(baz: string) => T
}

const a: Foo = {
 bar<T extends string >(baz: string) {
   return "some shit" as T
 }
}
источник

В

Виктор in $mol: Разработка
Ну то есть без указания типа целиком не получится?
источник

В

Виктор in $mol: Разработка
Этот пример упрощенный, у меня он более сложный, переписывать все типы густно
источник

ДК

Дим К in $mol: Разработка
Скорее всего из-за универсального декторатора, который любое число ключей принимает.
источник

В

Виктор in $mol: Разработка
Если точнее, то примерно так

interface Multicall {
 create: <F = unknown[], T = unknown>(
   calls: Call[], formatter?: (raw: T[], calls: Call[]) => F, errHandler?: CallGroup['errHandler']
 ) => Readable<F | undefined>
}

const multicall = {
   create: <F = unknown[], T = unknown>(
     calls: Call[], formatter?: (raw: T[], calls: Call[]) => F, errHandler?: CallGroup['errHandler']
   ): Readable<F | undefined> => {
     return readable(undefined, (set: (v: F | undefined) => void) => {
       if (!/* cond */) {
         set(undefined)
         return
       }

       if (formatter) {
         set(formatter(/* expr */ as T[], calls))
       } else {
         set(/* expr */ as unknown as F)
       }
     }
   }
}


приходится весь тип переписывать, интерфейс обязателен, typeof не прокатит
источник

ДК

Дим К in $mol: Разработка
ТС вроде не умеет выводить типы шаблонных параметров, только типы обычных. Так что ограничения в шаблонах приходится указывать явно.
источник

В

Виктор in $mol: Разработка
Ну вопрос не про ограничение
источник

В

Виктор in $mol: Разработка
А про использование шаблонного типа
источник

В

Виктор in $mol: Разработка
Но в целом понятно
источник

SY

Sergey Yuferev in $mol: Разработка
что только не придумают, лишь бы классы не юзать
источник

В

Виктор in $mol: Разработка
Чем классы тут помогут то?
источник