Two signatures I thought were the same are behaving differently from each other:
type FooType = [ string, number? ]
const fooAr = [ "foo" ] as FooType // compiles
type BarType = [ string, number | undefined ]
// Conversion of type '[string]' to type 'BarType' may be a mistake because neither type sufficiently overlaps with the other.
const barVar = [ "bar" ] as BarType
I wouldn't mind except I'm inferring the type from a library and can't change the signature. Is this how Typescript is supposed to behave?
== Edit
Was hoping it followed the object type behavior:
type FooType = { foo: string, bar: string | undefined }
const fooOjb = { foo: "abc" } as FooType // compiles
CodePudding user response:
FooType
is using an optional, where as BarType
is using undefined
.
For why they are different see here.
CodePudding user response:
?
and undefined
are not interchangable.
type FooType = [ string, number? ]
means that the array can look like this:
["hello"]
or["hello", 123]
type BarType = [ string, number | undefined ]
means that the array can look like this:
["hello", undefined]
or["hello", 123]