// @strict: true type MyTupleItem = {}; type MyTuple = [MyTupleItem, ...MyTupleItem[]]; type GenericFunction = (...fromArgs: T) => void; class GenericClass { from: GenericFunction | undefined; } function createClass(f: GenericFunction): GenericClass { return new GenericClass(/* ... use f */); } function consumeClass(c: GenericClass<[string, boolean]>) { } // should work consumeClass(createClass(str => console.log(str.length))); // should work consumeClass(createClass((str, _unused_num) => console.log(str.length)));