Size: a a a

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

2020 March 27

ДБ

Дмитрий Беляев in TypeScript — русскоговорящее сообщество
всем привет, подскажите, а можно ли форсировать вывод тип для части дженерика?
чтоб было понятно, что я имею ввиду набросал условный пример того что хочу сделать:
type SomeComplicatedType = any;
type BaseType = Record<string, SomeComplicatedType>;
type ResultType<T extends BaseType, K extends keyof T> = {t: T; k: K /* ... */ };
function f<T extends BaseType, K extends keyof T>(key: K): ResultType<T, K> {
   /* ... */
   return {k: key, t: {} as T};
}
так вот, я хочу, чтоб T непосредственно задавался пользователем, а K выводился из аргумента и был бы конкретным литералом

если сделать такой вызов:
const r = f('test');
то K становится конкретным литералом 'test', но T выводится как BaseType, что не устраивает

хочу вызывать вот так:
type MyT = Record<string, number>;
const r = f<MyT>('test');
но тут дженерик ругается, что хочет 2 аргумента, а передан только 1

ок, пробуем определить дефолтный тип:
function f<T extends BaseType, K extends keyof T = keyof T>(key: K): ResultType<T, K>

type MyT = Record<string, number>;
const r = f<MyT>('test');
так K скатывается ко всем ключам MyT, что тоже не подходит

была еще такая попытка:
function f<T extends BaseType, K extends keyof T = (infer KK extends keyof T ? KK : keyof T)>(key: K): ResultType<T, K>

type MyT = Record<string, number>;
const r = f<MyT>('test');
и хотя вроде это точно описывает, что я хочу, ts ругается на infer тут:
Объявления "infer" допустимы только в предложении "extends" условного типа.ts(1338)

может кто знает, как сделать правильно?
источник

J

Joseph in TypeScript — русскоговорящее сообщество
Ребята , доброе утро , не кто не сталкивался случайно с такой проблемой throw new _mongoose.Error.OverwriteModelError(name);
при билде падает
источник

L

L. in TypeScript — русскоговорящее сообщество
Привет. Проект rest api (nodejs + express+ typescript)  лучше собирать вебпаком ?
источник

K

Konstantin in TypeScript — русскоговорящее сообщество
L.
Привет. Проект rest api (nodejs + express+ typescript)  лучше собирать вебпаком ?
Нет, зачем?
источник

K

Konstantin in TypeScript — русскоговорящее сообщество
ts-node или tsc+babel просто
источник

L

L. in TypeScript — русскоговорящее сообщество
Konstantin
ts-node или tsc+babel просто
Спасибо!
источник

l(

lolmaus (Andrey Mikhaylov) in TypeScript — русскоговорящее сообщество
Товарищи, как типизировать такой паттерн?

const attrs = {};

if (foo) {
 attrs.foo = foo();
}

if (bar) {
 attrs.bar = bar.join(', ');
}

return parse(attrs);


У меня это было типизировано так:

const attrs: {foo?: string, bar?: string} = {};


Но теперь у меня состав атрибутов динамический, собирается через forEach. И я не понимаю, как ублажить TS.
источник

l(

lolmaus (Andrey Mikhaylov) in TypeScript — русскоговорящее сообщество
Хм, может, через map попробовать. forEach кажется легким антипаттерном.
источник

l(

lolmaus (Andrey Mikhaylov) in TypeScript — русскоговорящее сообщество
Через reduce.
источник

Р(

Роман ((((( in TypeScript — русскоговорящее сообщество
Всем привет, можно ли использовать Function для указания типа?

const test = (): Function => () => 'test';
источник

l(

lolmaus (Andrey Mikhaylov) in TypeScript — русскоговорящее сообщество
lolmaus (Andrey Mikhaylov)
Товарищи, как типизировать такой паттерн?

const attrs = {};

if (foo) {
 attrs.foo = foo();
}

if (bar) {
 attrs.bar = bar.join(', ');
}

return parse(attrs);


У меня это было типизировано так:

const attrs: {foo?: string, bar?: string} = {};


Но теперь у меня состав атрибутов динамический, собирается через forEach. И я не понимаю, как ублажить TS.
Переписал так:

  @action
 resetOptionalProductsIfNecessary(): void {
   const actionParams = this.accessoriesOptional.reduce((result, productOptional) => {
     if (!productOptional.productVariantMatchingByLengthAndOptionalProductColor) {
       result[productOptional.code] = false;
     }

     return result;
   }, {} as { [index: string]: false });

   this.setOptionalProducts(actionParams);
 }


Пришлось воспользоваться index signature
источник

ЕГ

Егор Гуща in TypeScript — русскоговорящее сообщество
А можно ли как-то исключить проверку типов конкретной библиотеки конкретного компонента реакта в тс конфиге?
источник

MS

Max Syabro in TypeScript — русскоговорящее сообщество
Егор Гуща
А можно ли как-то исключить проверку типов конкретной библиотеки конкретного компонента реакта в тс конфиге?
можно оверрайднуть попробовать
источник

ЕГ

Егор Гуща in TypeScript — русскоговорящее сообщество
Max Syabro
можно оверрайднуть попробовать
пробовал, но не помогло (
источник

MS

Max Syabro in TypeScript — русскоговорящее сообщество
а чего не так?
источник

MS

Max Syabro in TypeScript — русскоговорящее сообщество
типы для либы сломаны?
источник

ЕГ

Егор Гуща in TypeScript — русскоговорящее сообщество
Max Syabro
типы для либы сломаны?
они вообще не полностью дописаны, а тс ругается на это
источник

MS

Max Syabro in TypeScript — русскоговорящее сообщество
дописывай)
источник

ЕГ

Егор Гуща in TypeScript — русскоговорящее сообщество
Max Syabro
дописывай)
так я думал можно как-то расширить, но оверрайд не помог
источник

MS

Max Syabro in TypeScript — русскоговорящее сообщество
может кто подскажет, я с д.тс особо не работал
источник