Title: Add additional overloads to Array.prototype.concat · Issue #26976 · microsoft/TypeScript · GitHub
Open Graph Title: Add additional overloads to Array.prototype.concat · Issue #26976 · microsoft/TypeScript
X Title: Add additional overloads to Array.prototype.concat · Issue #26976 · microsoft/TypeScript
Description: Search Terms concat never Suggestion Add the following signatures to the Array interface: interface Array
Open Graph Description: Search Terms concat never Suggestion Add the following signatures to the Array interface: interface Array
X Description: Search Terms concat never Suggestion Add the following signatures to the Array interface: interface Array<T> { concat<U>(this: Array<never>, ...items: ConcatArray<U>[]): U[]...
Opengraph URL: https://github.com/microsoft/TypeScript/issues/26976
X: @github
Domain: github.com
{"@context":"https://schema.org","@type":"DiscussionForumPosting","headline":"Add additional overloads to Array.prototype.concat","articleBody":"\u003c!-- 🚨 STOP 🚨 𝗦𝗧𝗢𝗣 🚨 𝑺𝑻𝑶𝑷 🚨\r\n\r\nHalf of all issues filed here are duplicates, answered in the FAQ, or not appropriate for the bug tracker. Please read the FAQ first, especially the \"Common Feature Requests\" section.\r\n\r\n--\u003e\r\n\r\n## Search Terms\r\n\r\nconcat never\r\n\r\n## Suggestion\r\n\r\nAdd the following signatures to the `Array` interface:\r\n\r\n```ts\r\ninterface Array\u003cT\u003e {\r\n concat\u003cU\u003e(this: Array\u003cnever\u003e, ...items: ConcatArray\u003cU\u003e[]): U[];\r\n concat\u003cU\u003e(this: Array\u003cnever\u003e, ...items: (U | ConcatArray\u003cU\u003e)[]): U[];\r\n}\r\n```\r\n\r\nFor my use case this is not needed in `ReadonlyArray`, but could be added for consistency.\r\n\r\n## Use Cases\r\n\r\nI often find myself in the need of using `Array.prototype.flatMap`, but since I target Node.js 6 it's not available. Therefore I try to replace it with `[].concat(someArray.map(mightReturnArray))`.\r\nBut then I get an error like `Type 'whatever' is not assignable to type 'never'.` (with `strictNullChecks` enabled).\r\n\r\n## Examples\r\n\r\n```ts\r\ninterface Array\u003cT\u003e {\r\n /**\r\n * Combines two or more arrays.\r\n * @param items Additional items to add to the end of array1.\r\n */\r\n concat\u003cU\u003e(this: Array\u003cnever\u003e, ...items: ConcatArray\u003cU\u003e[]): U[];\r\n /**\r\n * Combines two or more arrays.\r\n * @param items Additional items to add to the end of array1.\r\n */\r\n concat\u003cU\u003e(this: Array\u003cnever\u003e, ...items: (U | ConcatArray\u003cU\u003e)[]): U[];\r\n}\r\n\r\n// now OK\r\n[].concat(['a']);\r\n['a'].concat(['b']);\r\n\r\n// still an error as expected\r\n[1].concat(['a']);\r\n```\r\n\r\nhttp://www.typescriptlang.org/play/#src=interface%20Array%3CT%3E%20%7B%0A%20%20%20%20%2F**%0A%20%20%20%20%20*%20Combines%20two%20or%20more%20arrays.%0A%20%20%20%20%20*%20%40param%20items%20Additional%20items%20to%20add%20to%20the%20end%20of%20array1.%0A%20%20%20%20%20*%2F%0A%20%20%20%20concat%3CU%3E(this%3A%20Array%3Cnever%3E%2C%20...items%3A%20ConcatArray%3CU%3E%5B%5D)%3A%20U%5B%5D%3B%0A%20%20%20%20%2F**%0A%20%20%20%20%20*%20Combines%20two%20or%20more%20arrays.%0A%20%20%20%20%20*%20%40param%20items%20Additional%20items%20to%20add%20to%20the%20end%20of%20array1.%0A%20%20%20%20%20*%2F%0A%20%20%20%20concat%3CU%3E(this%3A%20Array%3Cnever%3E%2C%20...items%3A%20(U%20%7C%20ConcatArray%3CU%3E)%5B%5D)%3A%20U%5B%5D%3B%0A%7D%0A%0A%2F%2F%20now%20OK%0A%5B%5D.concat(%5B'a'%5D)%3B%0A%5B'a'%5D.concat(%5B'b'%5D)%3B%0A%0A%2F%2F%20still%20an%20error%20as%20expected%0A%5B1%5D.concat(%5B'a'%5D)%3B\r\nRemember to enable `strictNullChecks`\r\n\r\n## Checklist\r\n\r\nMy suggestion meets these guidelines:\r\n* [x] This wouldn't be a breaking change in existing TypeScript / JavaScript code\r\n* [x] This wouldn't change the runtime behavior of existing JavaScript code\r\n* [x] This could be implemented without emitting different JS based on the types of the expressions\r\n* [x] This isn't a runtime feature (e.g. new expression-level syntax)\r\n\r\n","author":{"url":"https://github.com/ajafff","@type":"Person","name":"ajafff"},"datePublished":"2018-09-08T12:54:03.000Z","interactionStatistic":{"@type":"InteractionCounter","interactionType":"https://schema.org/CommentAction","userInteractionCount":1},"url":"https://github.com/26976/TypeScript/issues/26976"}
| 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:a1481995-ff70-ca30-d30d-e2065c600ccf |
| current-catalog-service-hash | 81bb79d38c15960b92d99bca9288a9108c7a47b18f2423d0f6438c5b7bcd2114 |
| request-id | 8C0C:2BB137:2026C7:2BD2C2:6A6267A8 |
| html-safe-nonce | e669027cb586f6850846fffcbe29c91c9ced6ccdecc0a76f27cee9d67ba91b05 |
| visitor-payload | eyJyZWZlcnJlciI6IiIsInJlcXVlc3RfaWQiOiI4QzBDOjJCQjEzNzoyMDI2Qzc6MkJEMkMyOjZBNjI2N0E4IiwidmlzaXRvcl9pZCI6IjU0OTkwMDI3NzQzODk2ODAwNDAiLCJyZWdpb25fZWRnZSI6ImlhZCIsInJlZ2lvbl9yZW5kZXIiOiJpYWQifQ== |
| visitor-hmac | 878c14ffb406932a811760bbf8dd7076466a2f158818b712bf41811231372287 |
| hovercard-subject-tag | issue:358292961 |
| 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/26976/issue_layout |
| twitter:image | https://opengraph.githubassets.com/1a9009ec236fbbeb9ea534c2fdfaf90a91dbf015a85e141d6c4b28c8444c19db/microsoft/TypeScript/issues/26976 |
| twitter:card | summary_large_image |
| og:image | https://opengraph.githubassets.com/1a9009ec236fbbeb9ea534c2fdfaf90a91dbf015a85e141d6c4b28c8444c19db/microsoft/TypeScript/issues/26976 |
| og:image:alt | Search Terms concat never Suggestion Add the following signatures to the Array interface: interface Array |
| og:image:width | 1200 |
| og:image:height | 600 |
| og:site_name | GitHub |
| og:type | object |
| og:author:username | ajafff |
| hostname | github.com |
| expected-hostname | github.com |
| None | 194bddaed53c0eb07047629c520853f4208e77a17ff57428346485cc202e39f2 |
| 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 | c2862cf2db52f0c7f6cba3de21ffeeafe7c5456e |
| ui-target | full |
| theme-color | #1e2327 |
| color-scheme | light dark |
Links:
Viewport: width=device-width