π Search Terms
Extract, type union
π Version & Regression Information
- This changed between versions 5.33 and 5.4
β― Playground Link
https://www.typescriptlang.org/play?ts=5.4.2#code/C4TwDgpgBAysBOBLAdgcwNIRAZwDwBUA+KAXigFEAPBAQwGNhcBrLAewDMoBvAWACgogqAG0AClBRQWIDlHxQa2OWIC6UCNQjIAJkuwIUqKAH4oogFxRkEAG4R4KyzWQh+AXwA0UfUjSF+-HSsyPpQAEYANqysYKRQBB6EABQAXpZwvhhYeEQAlKTEvAJQQSHAUOyWPoZxKe4BfCjA9uz00Ira3PyCAI4A7hBVBmj1fPwREOU06cNZOLgd-nxAA
π» Code
type StringKeys<T> = Extract<keyof {
[P in keyof T as T[P] extends string ? P: never]: any
}, string>
const bloop = <T,>(z: StringKeys<T>) => {
const f: string = z
}
interface asd {
qwe: string
}
let a: StringKeys<asd>
π Actual behavior
z is not assignable to string in the bloop function
π Expected behavior
z should be assignable to string, because we extract string-extending keys
Additional information about the issue
This was working just fine on 5.3.3, and continues to work when the generic is concretized (hence the let at the bottom of the example)
π Search Terms
Extract, type union
π Version & Regression Information
β― Playground Link
https://www.typescriptlang.org/play?ts=5.4.2#code/C4TwDgpgBAysBOBLAdgcwNIRAZwDwBUA+KAXigFEAPBAQwGNhcBrLAewDMoBvAWACgogqAG0AClBRQWIDlHxQa2OWIC6UCNQjIAJkuwIUqKAH4oogFxRkEAG4R4KyzWQh+AXwA0UfUjSF+-HSsyPpQAEYANqysYKRQBB6EABQAXpZwvhhYeEQAlKTEvAJQQSHAUOyWPoZxKe4BfCjA9uz00Ira3PyCAI4A7hBVBmj1fPwREOU06cNZOLgd-nxAA
π» Code
π Actual behavior
zis not assignable tostringin thebloopfunctionπ Expected behavior
zshould be assignable tostring, because we extract string-extending keysAdditional information about the issue
This was working just fine on 5.3.3, and continues to work when the generic is concretized (hence the
letat the bottom of the example)