Title: Contravariant inference gets picked when a a better covariant candidate exists · Issue #57908 · microsoft/TypeScript · GitHub
Open Graph Title: Contravariant inference gets picked when a a better covariant candidate exists · Issue #57908 · microsoft/TypeScript
X Title: Contravariant inference gets picked when a a better covariant candidate exists · Issue #57908 · microsoft/TypeScript
Description: 🔎 Search Terms covariant covariance contravariant contravariance inference candidates subtyping assignable subtype 🕗 Version & Regression Information This is the behavior in every version I tried ⏯ Playground Link https://www.typescriptl...
Open Graph Description: 🔎 Search Terms covariant covariance contravariant contravariance inference candidates subtyping assignable subtype 🕗 Version & Regression Information This is the behavior in every version I tried ⏯...
X Description: 🔎 Search Terms covariant covariance contravariant contravariance inference candidates subtyping assignable subtype 🕗 Version & Regression Information This is the behavior in every version I tri...
Opengraph URL: https://github.com/microsoft/TypeScript/issues/57908
X: @github
Domain: github.com
{"@context":"https://schema.org","@type":"DiscussionForumPosting","headline":"Contravariant inference gets picked when a a better covariant candidate exists","articleBody":"### 🔎 Search Terms\n\ncovariant covariance contravariant contravariance inference candidates subtyping assignable subtype\n\n### 🕗 Version \u0026 Regression Information\n\n- This is the behavior in every version I tried\n\n### ⏯ Playground Link\n\nhttps://www.typescriptlang.org/play?ts=5.5.0-dev.20240322#code/C4TwDgpgBAShCOBXCBnYAeAKgZQMYAsIBbAQyggA9gIA7AExSj0NID4oBeKAbwCgooSCACcQALig4CxEgG0ARENHyAugG5eAXw29QkJtNKceg5KID8ExDQDWNAPYB3GmqgAje3RCWo1u05oobV5eOghcABsSYWgAM2tcYABLe0Dhe0RqLGYZcipaBgMWElYACns3ACsJPgEwGIlSkgkpYoBKTnYAN3skug0BFENmyRzSAah8EnoIiEaY+Ak4ITRs4dYOjm7e-q02iR6+nVxUtCgukgi+kmpjUoB9GtMRbytbB2dXDy8fPw-AzSbdjcYK8dKZCClWpQepzc6Xa7UAA0-CgQ2KNVRAiU4ig8nkKIEmkJk2mdFm8wQQJ4WKgJxoZ2oaAkaGESRoAHNjAsAHQ4ibEvY6ShgezCYA8YJAA\n\n### 💻 Code\n\n```ts\r\ntype Request\u003cTSchema extends Schema\u003e = {\r\n query: TSchema[\"query\"];\r\n};\r\n\r\ntype Schema = { query?: unknown; body?: unknown };\r\n\r\ndeclare function route\u003cTSchema extends Schema\u003e(obj: {\r\n pre: (a: TSchema) =\u003e void;\r\n schema: TSchema;\r\n handle: (req: Request\u003cTSchema\u003e) =\u003e void;\r\n}): void;\r\n\r\nconst validate = (_: { query?: unknown; body?: unknown }) =\u003e {};\r\n\r\nroute({\r\n pre: validate,\r\n schema: {\r\n query: \"\",\r\n },\r\n handle: (req) =\u003e {\r\n const test: string = req.query;\r\n },\r\n});\r\n\r\nexport {};\r\n```\r\n\n\n### 🙁 Actual behavior\n\nassignment to `test` fails because `{ query?: unknown; body?: unknown; }` was inferred there\n\n### 🙂 Expected behavior\n\nI'd expect `{ query: string }` to be inferred here and the assignment to `test` to succeed\n\n### Additional information about the issue\n\nThis is a reduced version of [this failure](https://github.com/microsoft/TypeScript/pull/54183#issuecomment-2008420338).","author":{"url":"https://github.com/Andarist","@type":"Person","name":"Andarist"},"datePublished":"2024-03-22T18:30:04.000Z","interactionStatistic":{"@type":"InteractionCounter","interactionType":"https://schema.org/CommentAction","userInteractionCount":0},"url":"https://github.com/57908/TypeScript/issues/57908"}
| route-pattern | /_view_fragments/issues/show/:user_id/:repository/:id/issue_layout(.:format) |
| route-controller | voltron_issues_fragments |
| route-action | issue_layout |
| fetch-nonce | v2:7c0e8aa9-9518-75bc-6ced-329c25d364f4 |
| current-catalog-service-hash | 81bb79d38c15960b92d99bca9288a9108c7a47b18f2423d0f6438c5b7bcd2114 |
| request-id | 8EDA:6764:40837E:54A77E:6A614EB3 |
| html-safe-nonce | 51756d3febdc243be2a6e867f74c65d6515f96eb2db174fdb27557f9371ac4e5 |
| visitor-payload | eyJyZWZlcnJlciI6IiIsInJlcXVlc3RfaWQiOiI4RURBOjY3NjQ6NDA4MzdFOjU0QTc3RTo2QTYxNEVCMyIsInZpc2l0b3JfaWQiOiI0NzczMDU3NTQ5MzY0NzExMDkxIiwicmVnaW9uX2VkZ2UiOiJpYWQiLCJyZWdpb25fcmVuZGVyIjoiaWFkIn0= |
| visitor-hmac | 8a683d628ddcbd232d6169a30d2b6efd04cd2f35468501c6b37e6d1195c9b9bb |
| hovercard-subject-tag | issue:2203076426 |
| github-keyboard-shortcuts | repository,issues,copilot |
| google-site-verification | Apib7-x98H0j5cPqHWwSMm6dNU4GmODRoqxLiDzdx9I |
| octolytics-url | https://collector.github.com/github/collect |
| analytics-location | / |
| fb:app_id | 1401488693436528 |
| apple-itunes-app | app-id=1477376905, app-argument=https://github.com/_view_fragments/issues/show/microsoft/TypeScript/57908/issue_layout |
| twitter:image | https://opengraph.githubassets.com/47faba7c238a277f7ebb399f9da2b12b0fa5b74c909ce3b923874e7aeee595d4/microsoft/TypeScript/issues/57908 |
| twitter:card | summary_large_image |
| og:image | https://opengraph.githubassets.com/47faba7c238a277f7ebb399f9da2b12b0fa5b74c909ce3b923874e7aeee595d4/microsoft/TypeScript/issues/57908 |
| og:image:alt | 🔎 Search Terms covariant covariance contravariant contravariance inference candidates subtyping assignable subtype 🕗 Version & Regression Information This is the behavior in every version I tried ⏯... |
| og:image:width | 1200 |
| og:image:height | 600 |
| og:site_name | GitHub |
| og:type | object |
| og:author:username | Andarist |
| hostname | github.com |
| expected-hostname | github.com |
| None | 35b919fdb8e6752d2ed95a144e761ca5e924557563e2ed0a5ebf6c4430cdeeb6 |
| turbo-cache-control | no-preview |
| go-import | github.com/microsoft/TypeScript git https://github.com/microsoft/TypeScript.git |
| octolytics-dimension-user_id | 6154722 |
| octolytics-dimension-user_login | microsoft |
| octolytics-dimension-repository_id | 20929025 |
| octolytics-dimension-repository_nwo | microsoft/TypeScript |
| octolytics-dimension-repository_public | true |
| octolytics-dimension-repository_is_fork | false |
| octolytics-dimension-repository_network_root_id | 20929025 |
| octolytics-dimension-repository_network_root_nwo | microsoft/TypeScript |
| turbo-body-classes | logged-out env-production page-responsive |
| disable-turbo | false |
| browser-stats-url | https://api.github.com/_private/browser/stats |
| browser-errors-url | https://api.github.com/_private/browser/errors |
| release | 1e22b08b60ccb67c3791f565bed248565260e611 |
| ui-target | full |
| theme-color | #1e2327 |
| color-scheme | light dark |
Links:
Viewport: width=device-width