Title: exactOptionsPropertyTypes - anomolous behavior with Tuples, options, and spreading. · Issue #45764 · microsoft/TypeScript · GitHub
Open Graph Title: exactOptionsPropertyTypes - anomolous behavior with Tuples, options, and spreading. · Issue #45764 · microsoft/TypeScript
X Title: exactOptionsPropertyTypes - anomolous behavior with Tuples, options, and spreading. · Issue #45764 · microsoft/TypeScript
Description: Bug Report 🔎 Search Terms strictOptionalProperties #43947 #44548 exactOptionalPropertyTypes Labelled Tuple Elements Optional Tuple Parameters (enabled with labeling) Variadic Tuple Types 🕗 Version & Regression Information Spreading of Va...
Open Graph Description: Bug Report 🔎 Search Terms strictOptionalProperties #43947 #44548 exactOptionalPropertyTypes Labelled Tuple Elements Optional Tuple Parameters (enabled with labeling) Variadic Tuple Types 🕗 Version ...
X Description: Bug Report 🔎 Search Terms strictOptionalProperties #43947 #44548 exactOptionalPropertyTypes Labelled Tuple Elements Optional Tuple Parameters (enabled with labeling) Variadic Tuple Types 🕗 Version ...
Opengraph URL: https://github.com/microsoft/TypeScript/issues/45764
X: @github
Domain: github.com
{"@context":"https://schema.org","@type":"DiscussionForumPosting","headline":"exactOptionsPropertyTypes - anomolous behavior with Tuples, options, and spreading.","articleBody":"# Bug Report\r\n\r\n\u003c!--\r\n Please fill in each section completely. Thank you!\r\n--\u003e\r\n\r\n### 🔎 Search Terms\r\n\r\n- strictOptionalProperties #43947 #44548\r\n- [exactOptionalPropertyTypes](https://www.typescriptlang.org/docs/handbook/release-notes/typescript-4-4.html#exact-optional-property-types---exactoptionalpropertytypes) \r\n- [Labelled Tuple Elements](https://www.typescriptlang.org/docs/handbook/release-notes/typescript-4-0.html#labeled-tuple-elements)\r\n- Optional Tuple Parameters (enabled with labeling)\r\n- [Variadic Tuple Types](https://www.typescriptlang.org/docs/handbook/release-notes/typescript-4-0.html#variadic-tuple-types)\r\n\r\n\r\n\r\n### 🕗 Version \u0026 Regression Information\r\n\r\n- Spreading of Variadic Tuple types, as well as the ability to indicate final position optional parameters with labels, were introduced in ts 4.0. The noted behavior has been been present since then.\r\n\r\n- However, although there was hope it would be fixed with 4.4's exact `exactOptionsParameters`, it was not.\r\n\r\n\r\n### ⏯ Playground Link\r\n\r\nhttps://www.typescriptlang.org/play?exactOptionalPropertyTypes=true\u0026ts=4.4.2#code/ATAuE8AcFNgFQIzALzANoA8BcA7ArgLYBG0ATgDTAYD8WRA9vQDbQCGOAugFAgDG9OAM6gwCBFkQp0CcnhwATaADMAljmjyOwAPTbgAUQAaAYX0AZM-oBycAIS3gAdxWgAFsGgZWvUAHlIoCoCrEwACqT0MKQQcFDQgligpHiwbiqCwCS8rASw6cDsHqQRpAB0wDzA-EIioAgATBJIqGgySSncfALCogDMTVKt3JUQMPD1gwDkAHqT5KULiOSTACSTnVXdtfXicBMtM3NtydDLaxwA3JXVPaD1jXtTs+Qycoqq6vJn6xc6ejj0MikYAAWmAxjMAEEAJIAWVBYFc+QAygAJXwAVTMABFMrBCkD6KRrlswPV+o8Ds8ZKsfn8isCwRCYfCwWkMmjMTjgFZfHA8QUcAyiRUgA\r\n\r\n### 💻 Code\r\n\r\n\u003c!-- Please post the relevant code sample here as well--\u003e\r\n```ts\r\n type T1 = [x:number, x?:boolean]\r\n const t11:T1 = [1,undefined] // EXCELLENT!! with exactOptionalPropertyTypes:true this became is an error. \r\n const t12:T1 = [1,true]\r\n const t13:T1 = [1]\r\n\r\n type T2 = ['^',...T1,'$']\r\n const t21:T2 = ['^',1,true,'$'];\r\n const t22:T2 = ['^',1,undefined,'$']; // noerr - CLAIM - this SHOULD be an error\r\n const t23:T2 = ['^',1,'$']; // err - CLAIM - this SHOULD NOT be an error \r\n\r\n```\r\n\r\n### 🙁 Actual behavior\r\n\r\nIn the above code, variable declaration for `t22` is NOT an err.\r\nIn the above code, variable declaration for `t23` IS an err.\r\n\r\n### 🙂 Expected behavior\r\n\r\nIn the above code, variable declaration for `t22` IS an err.\r\nIn the above code, variable declaration for `t23` is NOT an err.\r\n\r\nEven though with `exactOptionalPropertyTypes` , the `T1` now no longer considers `[number,undefined]` to be a legal assignment, when `T1` is spread into `T2` the old behavior is used instead of the new behavior.\r\n\r\nThe [documentation for exactOptionalPropertyTypes](https://www.typescriptlang.org/docs/handbook/release-notes/typescript-4-4.html#exact-optional-property-types---exactoptionalpropertytypes) says \r\n\r\n\u003e In TypeScript 4.4, the new flag --exactOptionalPropertyTypes specifies that optional property types should be interpreted exactly as written, meaning that `| undefined` is not added to the type:\r\n\r\n```\r\n","author":{"url":"https://github.com/craigphicks","@type":"Person","name":"craigphicks"},"datePublished":"2021-09-07T07:41:52.000Z","interactionStatistic":{"@type":"InteractionCounter","interactionType":"https://schema.org/CommentAction","userInteractionCount":13},"url":"https://github.com/45764/TypeScript/issues/45764"}
| 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:007482f9-7ec6-195d-4a3b-ccbbeaca5c67 |
| current-catalog-service-hash | 81bb79d38c15960b92d99bca9288a9108c7a47b18f2423d0f6438c5b7bcd2114 |
| request-id | B650:1755F3:4ADC68:65D8BA:6A629BA7 |
| html-safe-nonce | 6a756f53755fb648a9e1151604847c497fea7986073bae543a268d808c19588d |
| visitor-payload | eyJyZWZlcnJlciI6IiIsInJlcXVlc3RfaWQiOiJCNjUwOjE3NTVGMzo0QURDNjg6NjVEOEJBOjZBNjI5QkE3IiwidmlzaXRvcl9pZCI6IjcxODIxMjk5ODU4Njg3MDA1ODQiLCJyZWdpb25fZWRnZSI6ImlhZCIsInJlZ2lvbl9yZW5kZXIiOiJpYWQifQ== |
| visitor-hmac | 7d53f16ca96736732718eefa8ecacada45184bf78dca3afddb45c829d44701a3 |
| hovercard-subject-tag | issue:989689913 |
| 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/45764/issue_layout |
| twitter:image | https://opengraph.githubassets.com/206a0b45be3ba303f13121516179e1fe869fcfdb2b0103ee11594d8d97570f22/microsoft/TypeScript/issues/45764 |
| twitter:card | summary_large_image |
| og:image | https://opengraph.githubassets.com/206a0b45be3ba303f13121516179e1fe869fcfdb2b0103ee11594d8d97570f22/microsoft/TypeScript/issues/45764 |
| og:image:alt | Bug Report 🔎 Search Terms strictOptionalProperties #43947 #44548 exactOptionalPropertyTypes Labelled Tuple Elements Optional Tuple Parameters (enabled with labeling) Variadic Tuple Types 🕗 Version ... |
| og:image:width | 1200 |
| og:image:height | 600 |
| og:site_name | GitHub |
| og:type | object |
| og:author:username | craigphicks |
| hostname | github.com |
| expected-hostname | github.com |
| None | a6443033349a18134b517627f043d4a59a5110337b879810c7229c2c7e28eda0 |
| 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 | d6c6cacbe32d3ddfd1796fbd1a39b8fb47b87daf |
| ui-target | canary-2 |
| theme-color | #1e2327 |
| color-scheme | light dark |
Links:
Viewport: width=device-width