import { use } from 'typescript-mix' ; import { SmartContract } from '../smart-contract.abstract' ; type Constructor < T > = new ( ... args ) => T ; type C < T > = Constructor < T > ; type BaseSmartContract = SmartContract < any , any , any , any > ; type B = BaseSmartContract ; export function SmartContractExtender < T1 extends B , T2 extends B , T3 extends B , T4 extends B , T5 extends B > ( t1 , t2 , t3 , t4 , t5 ) ; export function SmartContractExtender < T1 extends B , T2 extends B , T3 extends B , T4 extends B > ( t1 , t2 , t3 , t4 ) ; export function SmartContractExtender < T1 extends B , T2 extends B , T3 extends B > ( t1 , t2 , t3 ) ; export function SmartContractExtender < T1 extends B , T2 extends B > ( t1 , t2 ) ; export function SmartContractExtender < T1 extends B > ( t1 ) ; export function SmartContractExtender < T extends BaseSmartContract > ( ... mixins ) { const klass = class extends SmartContract < any , any , any , any > { } ; use ( ... mixins . reverse ( ) ) ( new klass ( ) , undefined ) ; return < any > klass ; }