//// [optionalFunctionArgAssignability.ts] interface Promise { then(onFulfill?: (value: T) => U, onReject?: (reason: any) => U): Promise; } var a = function then(onFulfill?: (value: string) => U, onReject?: (reason: any) => U): Promise { return null }; var b = function then(onFulFill?: (value: number) => U, onReject?: (reason: any) => U): Promise { return null }; a = b; // error because number is not assignable to string //// [optionalFunctionArgAssignability.js] var a = function then(onFulfill, onReject) { return null; }; var b = function then(onFulFill, onReject) { return null; }; a = b;