TypeScript Version: 3.3.3
function unsafeSpread<T extends number>(arg: T) {
return {...arg}; // why isn't this an error
}
let val = 1;
let spreadVal = {...val}; // but this is
let unknownVal: unknown = 1;
let unknownSpreadVal = {...unknownVal}; // and this is not
Expected behavior:
"Spread types may only be created from object types." should be thrown whenever non-objects are spread.
Actual behavior:
unknown and generics can be spread regardless
Playground Link:
https://www.typescriptlang.org/play/#src=function%20unsafeSpread%3CT%20extends%20number%3E(arg%3A%20T)%20%7B%0D%0A%20%20return%20%7B...arg%7D%3B%20%2F%2F%20why%20isn't%20this%20an%20error%0D%0A%7D%0D%0Alet%20val%20%3D%201%3B%0D%0Alet%20spreadVal%20%3D%20%7B...val%7D%3B%20%2F%2F%20but%20this%20is%0D%0Alet%20unknownVal%3A%20unknown%20%3D%201%3B%0D%0Alet%20unknownSpreadVal%20%3D%20%7B...unknownVal%7D%3B%20%2F%2F%20and%20this%20is%20not%0D%0A
Related Issues:
did not find any in the first couple pages when searching
TypeScript Version: 3.3.3
Expected behavior:
"Spread types may only be created from object types." should be thrown whenever non-objects are spread.
Actual behavior:
unknown and generics can be spread regardless
Playground Link:
https://www.typescriptlang.org/play/#src=function%20unsafeSpread%3CT%20extends%20number%3E(arg%3A%20T)%20%7B%0D%0A%20%20return%20%7B...arg%7D%3B%20%2F%2F%20why%20isn't%20this%20an%20error%0D%0A%7D%0D%0Alet%20val%20%3D%201%3B%0D%0Alet%20spreadVal%20%3D%20%7B...val%7D%3B%20%2F%2F%20but%20this%20is%0D%0Alet%20unknownVal%3A%20unknown%20%3D%201%3B%0D%0Alet%20unknownSpreadVal%20%3D%20%7B...unknownVal%7D%3B%20%2F%2F%20and%20this%20is%20not%0D%0A
Related Issues:
did not find any in the first couple pages when searching