キ
Size: a a a
キ
キ
useState<T> и name: keyof Tキ
const [popUp, setPopUp] = useState<PopUpState>({ ... });
const togglePopUpHandler = (name: keyof PopUpState) => { ... };ДК
const [popUp, setPopUp] = useState<PopUpState>({ ... });
const togglePopUpHandler = (name: keyof PopUpState) => { ... };7
И
7
И
АБ
И
s
export class DetailProductUnitComponent implements OnInit {
constructor(protected productUnitPricesService: ProductUnitPricesService) {}
ngOnInit(): void {
this.units$ = this.productUnitPricesService.getUnits(this.product.code);
}
есть заэксетнженный от него компонентexport class ProductUnitComponent extends DetailProductUnitComponent implements OnInit {
ngOnInit(): void {
super.ngOnInit();
this.loading$ = this.productUnitPricesService.getUnitPricesLoading(this.product.code);
}
в приложении все работает. если запускаем это в тестах, то если в tsconfig указать target: "es5" все норм, а если указать target: "es2015" constructor(productUnitPricesService: ProductUnitPricesService) {
super(productUnitPricesService);
}
в тестах естественно провайдится мок сервиса, если бы не провайдилось, то не работало ни с es5, ни с указанным конструктором. чет не гуглится проблемкаu
Exp1 extends Exp2 ? Exp3 : Exp4 (где каждое Exp — некоторое выражение от типов) вычисляется дистрибутивно, только если Exp1 является типом-параметром generic-типа (ни во что не обёрнутым — как сказано в документации, a naked type parameter).type G<T> = T extends unknown ? { x: T } : 1.extends стоит чистый тип-параметр T, поэтому условие будет вычисляться дистрибутивно.type G<T> = [T] extends unknown ? { x: T } : 1.extend стоит [T] — литерал кортежа от типа-параметра T, а не сам тип-параметр, — так что дистрибутивность не включится.T extends Exp2 ? Exp3 : Exp4 недистрибутивно, достаточно обернуть выражения слева и справа от extends в квадратные скобки ([T] extends [Exp2] ? Exp3 : Exp4).IE
protected _prop: string;
public get prop(): string { return this._prop };
public set prop(prop: string) { this._prop = prop };
キ
キ
IE
A
A

A

A