TypeScript Version: 3.4.0-dev.20190223
Search Terms: 3.4 inference generic readonly
Code
The following snippet emits an error in TS 3.4 whereas in TS 3.3 it compiles fine.
classErrorResult{readonlyisError=true;staticcombine(errorResults: ReadonlyArray<ErrorResult>): ErrorResult{returnnewErrorResult(/* ... combine errorResults ... */);}}//functionextractAndCombineErrorResults<T,TErrorResultextendsErrorResult>(allResults: ReadonlyArray<T|TErrorResult>,combine: (details: ReadonlyArray<TErrorResult>)=>TErrorResult,): ReadonlyArray<T>|TErrorResult{return/* dummy result: */[];}//interfaceSomeResult{isSomeResult: true}constallResults: ReadonlyArray<SomeResult|ErrorResult>=[];// Here the inference doesn't work anymore:constresult1: ReadonlyArray<SomeResult>|ErrorResult=extractAndCombineErrorResults(allResults,ErrorResult.combine);// Explicit generic args work:constresult2: ReadonlyArray<SomeResult>|ErrorResult=extractAndCombineErrorResults<SomeResult,ErrorResult>(allResults,ErrorResult.combine);Command line: npx tsc TypeScriptIssue.ts
Expected behavior:
No compile error.
Actual behavior:
TSC emits
TypeScriptIssue30074.ts:28:7 - error TS2322: Type 'ErrorResult | readonly (ErrorResult | SomeResult)[]' is not assignable to type 'ErrorResult | readonly SomeResult[]'.
Type 'readonly (ErrorResult | SomeResult)[]' is not assignable to type 'ErrorResult | readonly SomeResult[]'.
Type 'readonly (ErrorResult | SomeResult)[]' is not assignable to type 'readonly SomeResult[]'.
Type 'ErrorResult | SomeResult' is not assignable to type 'SomeResult'.
Property 'isSomeResult' is missing in type 'ErrorResult' but required in type 'SomeResult'.
28 const result1: ReadonlyArray<SomeResult> | ErrorResult =
~~~~~~~
Playground Link:(works in TS 3.3)
Possibly related:#29435
TypeScript Version: 3.4.0-dev.20190223
Search Terms: 3.4 inference generic readonly
Code
The following snippet emits an error in TS 3.4 whereas in TS 3.3 it compiles fine.
Command line:
npx tsc TypeScriptIssue.tsExpected behavior:
No compile error.
Actual behavior:
TSC emits
Playground Link:(works in TS 3.3)
Possibly related:#29435