{"id":25819483,"url":"https://github.com/topce/parameter-arity-variance-is-not-correct","last_synced_at":"2026-01-26T04:02:42.248Z","repository":{"id":268711586,"uuid":"904236814","full_name":"topce/parameter-arity-variance-is-not-correct","owner":"topce","description":null,"archived":false,"fork":false,"pushed_at":"2025-11-29T20:15:48.000Z","size":30805,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-12-02T01:33:06.125Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/topce.png","metadata":{"files":{"readme":"README.MD","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2024-12-16T14:01:23.000Z","updated_at":"2025-11-29T20:15:52.000Z","dependencies_parsed_at":"2024-12-18T13:31:46.353Z","dependency_job_id":"d9d10ea8-d625-4281-ae07-bba642c2cb62","html_url":"https://github.com/topce/parameter-arity-variance-is-not-correct","commit_stats":null,"previous_names":["topce/parameter-arity-variance-is-not-correct"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/topce/parameter-arity-variance-is-not-correct","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/topce%2Fparameter-arity-variance-is-not-correct","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/topce%2Fparameter-arity-variance-is-not-correct/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/topce%2Fparameter-arity-variance-is-not-correct/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/topce%2Fparameter-arity-variance-is-not-correct/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/topce","download_url":"https://codeload.github.com/topce/parameter-arity-variance-is-not-correct/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/topce%2Fparameter-arity-variance-is-not-correct/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28766367,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-26T03:54:34.369Z","status":"ssl_error","status_checked_at":"2026-01-26T03:54:33.031Z","response_time":59,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2025-02-28T08:56:14.591Z","updated_at":"2026-01-26T04:02:42.240Z","avatar_url":"https://github.com/topce.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Parameter Arity Variance in TypeScript: A Critical Analysis\r\n\r\n\u003cdiv align=\"center\"\u003e\r\n  \r\n![TypeScript](https://img.shields.io/badge/TypeScript-007ACC?style=for-the-badge\u0026logo=typescript\u0026logoColor=white)\r\n![GitHub](https://img.shields.io/badge/GitHub-100000?style=for-the-badge\u0026logo=github\u0026logoColor=white)\r\n![Custom](https://img.shields.io/badge/Parameter_Variance-Critical-red?style=for-the-badge)\r\n\r\n\u003c/div\u003e\r\n\r\n\u003e **A robust analysis of a critical type-safety issue in TypeScript's parameter checking mechanism.**\r\n\r\n\u003cdetails\u003e\r\n\u003csummary\u003e📑 Table of Contents\u003c/summary\u003e\r\n\r\n- [📌 The Problem](#-the-problem)\r\n- [🚀 Benefits of the Custom TypeScript Compiler](#-benefits-of-the-custom-typescript-compiler)\r\n- [🚀 Running the Examples](#-running-the-examples)\r\n- [🔍 Examples Demonstrating the Issue](#-examples-demonstrating-the-issue)\r\n- [⚖️ Default TypeScript vs. Custom Implementation Comparison](#️-default-typescript-vs-custom-implementation-comparison)\r\n- [❗ Why This Matters](#-why-this-matters)\r\n- [🔧 Technical Implementation](#-technical-implementation)\r\n- [🔄 Previously Reported Issues Now Resolved](#-previously-reported-issues-now-resolved)\r\n\r\n\u003c/details\u003e\r\n\r\n## 📌 The Problem\r\n\r\nTypeScript allows functions with fewer parameters to be assigned to function types with more parameters. While this enables common JavaScript patterns like array callbacks, it can also introduce subtle bugs when a function is expected to handle all provided parameters.\r\n\r\n## 🚀 Running the Examples\r\n\r\n**Note: This project currently only works on Windows.**\r\n\r\n### 📦 Dependencies\r\n\r\nThis project includes both the latest official TypeScript compiler and a custom enhanced version for comparison.\r\n\r\n**⚠️ Note: `@topce/native-preview` currently only works on Windows.**\r\n\r\nInstall all dependencies:\r\n\r\n```bash\r\nnpm install\r\n```\r\n\r\nThis will install:\r\n\r\n- **TypeScript 5.7.2** (latest official version) - Standard TypeScript compiler\r\n- **@topce/native-preview** - Custom TypeScript compiler with enhanced parameter checking\r\n\r\n### 🔧 Installation \u0026 Setup\r\n\r\n1. **Clone the repository:**\r\n\r\n   ```bash\r\n   git clone https://github.com/topce/parameter-arity-variance-is-not-correct.git\r\n   cd parameter-arity-variance-is-not-correct\r\n   ```\r\n\r\n2. **Install dependencies:**\r\n\r\n   ```bash\r\n   npm install\r\n   ```\r\n\r\n3. **Run a quick comparison:**\r\n   ```bash\r\n   npm run compare:20274\r\n   ```\r\n\r\n**Expected Output:**\r\n\r\n- **Default TypeScript**: Some errors reported, but allows parameter arity variance\r\n- **Custom TypeScript**: Additional errors reported for parameter arity mismatches\r\n\r\n**Example from `npm run compare:20274`:**\r\n\r\n```\r\n=== Default TypeScript ===\r\n(No errors - compiles successfully)\r\n\r\n=== Custom TypeScript ===\r\n20274.ts:6:7 - error TS2322: Type '() =\u003e void' is not assignable to type 'Handler\u003cstring\u003e'.\r\n  Target signature provides too few arguments. Expected 1 or more, but got 0.\r\n```\r\n\r\n### 🔧 TypeScript Compiler\r\n\r\nThis project uses a custom TypeScript compiler provided by `@topce/native-preview`. The compiler is installed via npm and provides enhanced parameter arity variance checking.\r\n\r\n**Available Commands:**\r\n\r\n### Custom TypeScript Compiler (Enhanced)\r\n\r\n| Command                   | Description                                                      |\r\n| ------------------------- | ---------------------------------------------------------------- |\r\n| `npm run transpile:main`  | Transpile main.ts using the custom compiler                      |\r\n| `npm run transpile:all`   | Transpile all TypeScript files using the custom compiler         |\r\n| `npm run transpile:13043` | Transpile 13043.ts (Type hole with optional parameters)          |\r\n| `npm run transpile:16871` | Transpile 16871.ts (Generic function parameter checking)         |\r\n| `npm run transpile:17868` | Transpile 17868.ts (Reject functions with not enough parameters) |\r\n| `npm run transpile:20274` | Transpile 20274.ts (Required callback parameters)                |\r\n| `npm run transpile:20541` | Transpile 20541.ts (Function argument comparison)                |\r\n| `npm run transpile:21868` | Transpile 21868.ts (Function assignment without parameters)      |\r\n\r\n### Default TypeScript Compiler (Latest)\r\n\r\n| Command             | Description                                             |\r\n| ------------------- | ------------------------------------------------------- |\r\n| `npm run tsc:main`  | Transpile main.ts using default TypeScript              |\r\n| `npm run tsc:all`   | Transpile all TypeScript files using default TypeScript |\r\n| `npm run tsc:13043` | Transpile 13043.ts using default TypeScript             |\r\n| `npm run tsc:16871` | Transpile 16871.ts using default TypeScript             |\r\n| `npm run tsc:17868` | Transpile 17868.ts using default TypeScript             |\r\n| `npm run tsc:20274` | Transpile 20274.ts using default TypeScript             |\r\n| `npm run tsc:20541` | Transpile 20541.ts using default TypeScript             |\r\n| `npm run tsc:21868` | Transpile 21868.ts using default TypeScript             |\r\n\r\n### Side-by-Side Comparison Commands\r\n\r\n| Command                 | Description                         |\r\n| ----------------------- | ----------------------------------- |\r\n| `npm run compare:13043` | Compare both compilers on 13043.ts  |\r\n| `npm run compare:16871` | Compare both compilers on 16871.ts  |\r\n| `npm run compare:17868` | Compare both compilers on 17868.ts  |\r\n| `npm run compare:20274` | Compare both compilers on 20274.ts  |\r\n| `npm run compare:20541` | Compare both compilers on 20541.ts  |\r\n| `npm run compare:21868` | Compare both compilers on 21868.ts  |\r\n| `npm run compare:all`   | Compare both compilers on all files |\r\n\r\n**Direct Usage:**\r\n\r\n### Custom TypeScript Compiler\r\n\r\n```bash\r\n# Transpile main.ts\r\nnpx tsgo tsc .\\main.ts\r\n\r\n# Transpile individual files\r\nnpx tsgo tsc .\\13043.ts\r\nnpx tsgo tsc .\\16871.ts\r\nnpx tsgo tsc .\\17868.ts\r\nnpx tsgo tsc .\\20274.ts\r\nnpx tsgo tsc .\\20541.ts\r\nnpx tsgo tsc .\\21868.ts\r\n\r\n# Transpile all TypeScript files at once\r\nnpx tsgo tsc *.ts\r\n```\r\n\r\n### Default TypeScript Compiler\r\n\r\n```bash\r\n# Transpile main.ts\r\nnpx tsc .\\main.ts\r\n\r\n# Transpile individual files\r\nnpx tsc .\\13043.ts\r\nnpx tsc .\\16871.ts\r\nnpx tsc .\\17868.ts\r\nnpx tsc .\\20274.ts\r\nnpx tsc .\\20541.ts\r\nnpx tsc .\\21868.ts\r\n\r\n# Transpile all TypeScript files at once\r\nnpx tsc *.ts\r\n```\r\n\r\n### Quick Comparison\r\n\r\n```bash\r\n# Compare specific issue\r\nnpm run compare:20274\r\n\r\n# Compare all issues at once\r\nnpm run compare:all\r\n```\r\n\r\n### ⚙️ Enhanced Compiler Features\r\n\r\nThe custom TypeScript compiler provided by `@topce/native-preview`:\r\n\r\n- ✅ Enforces stricter parameter checking by default\r\n- ✅ Flags functions with fewer parameters when assigned to function types with more parameters\r\n- ✅ Reports errors in cases where the original TypeScript compiler would silently allow potentially unsafe assignments\r\n\r\nThis helps identify potential runtime errors that could occur when required parameters are silently ignored.\r\n\r\n## 🔍 Examples Demonstrating the Issue\r\n\r\n### Issue #13043: Type hole with optional parameters\r\n\r\n\u003cdetails\u003e\r\n\u003csummary\u003e\u003cb\u003eDefault Parameter Assignment Issue\u003c/b\u003e\u003c/summary\u003e\r\n\r\n**File:** `13043.ts`\r\n\r\n```typescript\r\nconst x = (a: number = 1): number =\u003e a;\r\nconst y: () =\u003e number = x;\r\n// TypeScript error: \"Supplied parameters do not match signature of call target.\"\r\n// OK\r\ny(\"x\").toFixed();\r\n\r\nconst z: (a: string) =\u003e number = y;\r\n// No TypeScript error\r\n// Runtime error: Uncaught TypeError: z(...).toFixed is not a function\r\nz(\"x\").toFixed();\r\n```\r\n\r\n**Problem:** TypeScript allows assigning a function with no parameters to a function type that expects parameters, leading to runtime errors.\r\n\r\n| Default TypeScript                       | Custom Implementation                         |\r\n| ---------------------------------------- | --------------------------------------------- |\r\n| ❌ Allows `z: (a: string) =\u003e number = y` | ✅ Reports error for parameter mismatch       |\r\n| ❌ Runtime error when calling `z('x')`   | ✅ Compile-time error prevents runtime issues |\r\n\r\n\u003c/details\u003e\r\n\r\n### Issue #16871: Generic function parameter type checking\r\n\r\n\u003cdetails\u003e\r\n\u003csummary\u003e\u003cb\u003eGeneric Function Parameter Inconsistency\u003c/b\u003e\u003c/summary\u003e\r\n\r\n**File:** `16871.ts`\r\n\r\n```typescript\r\ninterface Payload {\r\n  a: string;\r\n  b: number;\r\n}\r\n\r\nlet doFoo: (payload: Payload) =\u003e void;\r\n\r\nlet executeAction: \u003cP\u003e(action: (payload: P) =\u003e void, payload: P) =\u003e void;\r\n\r\nexecuteAction(doFoo, { a: \"hello\", b: 2 }); //no errors, ok\r\nexecuteAction(doFoo, {}); //no errors, wrong!\r\nexecuteAction(doFoo, { qwe: 2 }); //errors, ok\r\nexecuteAction(doFoo, { a: \"hola\" }); //no errors, wrong!\r\n```\r\n\r\n**Problem:** Generic function parameter checking is inconsistent between direct calls and generic wrapper calls.\r\n\r\n| Default TypeScript                              | Custom Implementation                   |\r\n| ----------------------------------------------- | --------------------------------------- |\r\n| ❌ Allows `executeAction(doFoo, {})`            | ✅ Reports error for missing properties |\r\n| ❌ Allows `executeAction(doFoo, { a: 'hola' })` | ✅ Reports error for incomplete payload |\r\n\r\n\u003c/details\u003e\r\n\r\n### Issue #17868: Reject functions with not enough parameters\r\n\r\n\u003cdetails\u003e\r\n\u003csummary\u003e\u003cb\u003eStrict Mode Parameter Checking\u003c/b\u003e\u003c/summary\u003e\r\n\r\n**File:** `17868.ts`\r\n\r\n```typescript\r\nfunction squareAll(nums: number[]) {\r\n  return nums.map((v) =\u003e v ** 2);\r\n}\r\n```\r\n\r\n**Problem:** Functions with fewer parameters should be rejected in strict mode when assigned to function types expecting more parameters.\r\n\r\n| Default TypeScript                                  | Custom Implementation                       |\r\n| --------------------------------------------------- | ------------------------------------------- |\r\n| ❌ Allows parameter count mismatches in strict mode | ✅ Enforces strict parameter count checking |\r\n\r\n\u003c/details\u003e\r\n\r\n### Issue #20274: Required callback parameters\r\n\r\n\u003cdetails\u003e\r\n\u003csummary\u003e\u003cb\u003eCallback Parameter Requirements\u003c/b\u003e\u003c/summary\u003e\r\n\r\n**File:** `20274.ts`\r\n\r\n```typescript\r\n// TypeScript Issue #20274: Allow specifying that a function parameter is required\r\n\r\ntype Handler\u003cT\u003e = (item: T) =\u003e void;\r\n\r\n// Problem: Both of these are allowed, but sometimes you want to require the parameter\r\nconst ignoresParam: Handler\u003cstring\u003e = () =\u003e {}; // Should be error?\r\nconst usesParam: Handler\u003cstring\u003e = (item) =\u003e console.log(item); // OK\r\n```\r\n\r\n**Problem:** No way to specify that a callback function parameter is required and must be acknowledged.\r\n\r\n| Default TypeScript                                     | Custom Implementation                      |\r\n| ------------------------------------------------------ | ------------------------------------------ |\r\n| ❌ Allows `() =\u003e {}` for `Handler\u003cstring\u003e`             | ✅ Reports error when parameter is ignored |\r\n| ❌ No distinction between required/optional parameters | ✅ Enforces parameter acknowledgment       |\r\n\r\n\u003c/details\u003e\r\n\r\n### Real-world Problem Scenarios\r\n\r\n\u003cdetails\u003e\r\n\u003csummary\u003e\u003cb\u003eInterface Implementation Inconsistency\u003c/b\u003e\u003c/summary\u003e\r\n\r\n```typescript\r\ninterface I {\r\n  hi(a: string, b: string): void;\r\n}\r\n\r\n// Error - TypeScript correctly prevents adding MORE parameters\r\nclass A implements I {\r\n  hi(a: string, b: string, c: string): void {\r\n    // Error: Too many parameters\r\n    throw new Error(\"Method not implemented.\" + a);\r\n  }\r\n}\r\n\r\n// No error - but should be flagged as potentially unsafe\r\nclass B implements I {\r\n  hi(a: string): void {\r\n    // Only handles first parameter when interface requires two\r\n    throw new Error(\"Method not implemented.\" + a);\r\n  }\r\n}\r\n```\r\n\r\n| Default TypeScript                           | Custom Implementation                   |\r\n| -------------------------------------------- | --------------------------------------- |\r\n| ❌ Allows fewer parameters in implementation | ✅ Reports error for missing parameters |\r\n| ✅ Correctly prevents extra parameters       | ✅ Maintains existing behavior          |\r\n\r\n\u003c/details\u003e\r\n\r\n\u003cdetails\u003e\r\n\u003csummary\u003e\u003cb\u003eService Implementation Safety\u003c/b\u003e\u003c/summary\u003e\r\n\r\n```typescript\r\n// A service interface that processes users\r\ninterface UserService {\r\n  processUser(name: string, id: number): void;\r\n}\r\n\r\nclass BrokenUserService implements UserService {\r\n  // TypeScript accepts this despite missing the required id parameter\r\n  processUser(name: string): void {\r\n    // This implementation never uses the id, which could cause logic errors\r\n    console.log(`Processing user ${name}`);\r\n    // What if business logic depended on the id parameter?\r\n  }\r\n}\r\n```\r\n\r\n| Default TypeScript                         | Custom Implementation                          |\r\n| ------------------------------------------ | ---------------------------------------------- |\r\n| ❌ Silently ignores missing `id` parameter | ✅ Reports error for incomplete implementation |\r\n| ❌ False sense of interface compliance     | ✅ Ensures true interface compliance           |\r\n\r\n\u003c/details\u003e\r\n\r\n\u003cdetails\u003e\r\n\u003csummary\u003e\u003cb\u003eCommon Case Where Variance Is Still Useful\u003c/b\u003e\u003c/summary\u003e\r\n\r\n```typescript\r\n// Standard array iteration - here we want to allow partial parameter usage\r\nlet items = [1, 2, 3];\r\nitems.forEach((arg) =\u003e console.log(arg)); // Only using first parameter is fine\r\nitems.forEach(() =\u003e console.log(\"Counting\")); // Sometimes we don't need parameters at all\r\n```\r\n\r\n**Note:** The custom implementation maintains compatibility with common JavaScript patterns while providing stricter checking where it matters most.\r\n\r\n\u003c/details\u003e\r\n\r\n## ⚖️ Default TypeScript vs. Custom Implementation Comparison\r\n\r\n### Core Behavioral Differences\r\n\r\n\u003cdiv align=\"center\"\u003e\r\n\u003ctable\u003e\r\n  \u003ctr\u003e\r\n    \u003cth\u003eScenario\u003c/th\u003e\r\n    \u003cth\u003eDefault TypeScript\u003c/th\u003e\r\n    \u003cth\u003eCustom Implementation\u003c/th\u003e\r\n    \u003cth\u003eImpact\u003c/th\u003e\r\n  \u003c/tr\u003e\r\n  \u003ctr\u003e\r\n    \u003ctd\u003e\u003cb\u003eFunction with fewer parameters assigned to type expecting more\u003c/b\u003e\u003c/td\u003e\r\n    \u003ctd\u003e❌ Allowed (silent)\u003c/td\u003e\r\n    \u003ctd\u003e✅ Error reported\u003c/td\u003e\r\n    \u003ctd\u003e🔴 Prevents runtime bugs\u003c/td\u003e\r\n  \u003c/tr\u003e\r\n  \u003ctr\u003e\r\n    \u003ctd\u003e\u003cb\u003eInterface implementation with missing parameters\u003c/b\u003e\u003c/td\u003e\r\n    \u003ctd\u003e❌ Allowed (silent)\u003c/td\u003e\r\n    \u003ctd\u003e✅ Error reported\u003c/td\u003e\r\n    \u003ctd\u003e🔴 Ensures contract compliance\u003c/td\u003e\r\n  \u003c/tr\u003e\r\n  \u003ctr\u003e\r\n    \u003ctd\u003e\u003cb\u003eCallback functions ignoring required parameters\u003c/b\u003e\u003c/td\u003e\r\n    \u003ctd\u003e❌ Allowed (silent)\u003c/td\u003e\r\n    \u003ctd\u003e✅ Error reported\u003c/td\u003e\r\n    \u003ctd\u003e🟠 Improves API safety\u003c/td\u003e\r\n  \u003c/tr\u003e\r\n  \u003ctr\u003e\r\n    \u003ctd\u003e\u003cb\u003eGeneric function parameter checking\u003c/b\u003e\u003c/td\u003e\r\n    \u003ctd\u003e❌ Inconsistent behavior\u003c/td\u003e\r\n    \u003ctd\u003e✅ Consistent checking\u003c/td\u003e\r\n    \u003ctd\u003e🟠 Better type safety\u003c/td\u003e\r\n  \u003c/tr\u003e\r\n  \u003ctr\u003e\r\n    \u003ctd\u003e\u003cb\u003eArray callback patterns (forEach, map, etc.)\u003c/b\u003e\u003c/td\u003e\r\n    \u003ctd\u003e✅ Properly supported\u003c/td\u003e\r\n    \u003ctd\u003e✅ Maintained compatibility\u003c/td\u003e\r\n    \u003ctd\u003e🟢 No breaking changes\u003c/td\u003e\r\n  \u003c/tr\u003e\r\n  \u003ctr\u003e\r\n    \u003ctd\u003e\u003cb\u003eFunction with extra parameters\u003c/b\u003e\u003c/td\u003e\r\n    \u003ctd\u003e✅ Correctly rejected\u003c/td\u003e\r\n    \u003ctd\u003e✅ Maintained behavior\u003c/td\u003e\r\n    \u003ctd\u003e🟢 Existing safety preserved\u003c/td\u003e\r\n  \u003c/tr\u003e\r\n\u003c/table\u003e\r\n\u003c/div\u003e\r\n\r\n### TypeScript's Official Justification vs. Reality\r\n\r\nTypeScript's official position (from their [FAQ](https://github.com/Microsoft/TypeScript/wiki/FAQ#parameter-arity-variance-is-correct)) is that this behavior is \"correct\" because it supports common JavaScript patterns like array callbacks.\r\n\r\n**The Problem with This Justification:**\r\n\r\n\u003cdiv align=\"center\"\u003e\r\n  \u003ctable\u003e\r\n    \u003ctr\u003e\r\n      \u003ctd align=\"center\"\u003e❌\u003c/td\u003e\r\n      \u003ctd\u003e\u003cb\u003eTypeScript enforces that you can't add MORE parameters than an interface specifies\u003c/b\u003e\u003c/td\u003e\r\n    \u003c/tr\u003e\r\n    \u003ctr\u003e\r\n      \u003ctd align=\"center\"\u003e⚠️\u003c/td\u003e\r\n      \u003ctd\u003e\u003cb\u003eBut allows you to implement FEWER parameters, potentially ignoring critical information\u003c/b\u003e\u003c/td\u003e\r\n    \u003c/tr\u003e\r\n    \u003ctr\u003e\r\n      \u003ctd align=\"center\"\u003e🔄\u003c/td\u003e\r\n      \u003ctd\u003e\u003cb\u003eThis asymmetry creates inconsistent type safety guarantees\u003c/b\u003e\u003c/td\u003e\r\n    \u003c/tr\u003e\r\n  \u003c/table\u003e\r\n\u003c/div\u003e\r\n\r\n### Detailed Comparison by Issue\r\n\r\n| Issue      | Default TypeScript Behavior                               | Custom Implementation                  | Benefit                             |\r\n| ---------- | --------------------------------------------------------- | -------------------------------------- | ----------------------------------- |\r\n| **#13043** | Allows `(a: string) =\u003e number = () =\u003e 1`                  | Reports parameter count mismatch       | Prevents runtime type errors        |\r\n| **#16871** | Inconsistent generic parameter checking                   | Consistent parameter validation        | Reliable generic function behavior  |\r\n| **#17868** | No strict mode parameter enforcement                      | Strict parameter count checking        | Enhanced type safety in strict mode |\r\n| **#20274** | No way to require callback parameters                     | Enforces parameter acknowledgment      | Better callback API design          |\r\n| **#20541** | Unexpected function argument comparison                   | Consistent argument comparison         | Predictable type checking           |\r\n| **#21868** | Parameterless functions assignable to parameterized types | Reports parameter requirement mismatch | Prevents silent parameter ignoring  |\r\n\r\n### Performance and Compatibility\r\n\r\n\u003cdiv align=\"center\"\u003e\r\n\u003ctable\u003e\r\n  \u003ctr\u003e\r\n    \u003cth\u003eAspect\u003c/th\u003e\r\n    \u003cth\u003eDefault TypeScript\u003c/th\u003e\r\n    \u003cth\u003eCustom Implementation\u003c/th\u003e\r\n  \u003c/tr\u003e\r\n  \u003ctr\u003e\r\n    \u003ctd\u003e\u003cb\u003eCompilation Speed\u003c/b\u003e\u003c/td\u003e\r\n    \u003ctd\u003eStandard performance\u003c/td\u003e\r\n    \u003ctd\u003eComparable performance with enhanced checking\u003c/td\u003e\r\n  \u003c/tr\u003e\r\n  \u003ctr\u003e\r\n    \u003ctd\u003e\u003cb\u003eJavaScript Output\u003c/b\u003e\u003c/td\u003e\r\n    \u003ctd\u003eStandard JS output\u003c/td\u003e\r\n    \u003ctd\u003eIdentical JS output (compile-time only changes)\u003c/td\u003e\r\n  \u003c/tr\u003e\r\n  \u003ctr\u003e\r\n    \u003ctd\u003e\u003cb\u003eExisting Code Compatibility\u003c/b\u003e\u003c/td\u003e\r\n    \u003ctd\u003e100% compatible\u003c/td\u003e\r\n    \u003ctd\u003eMay require fixes for previously hidden issues\u003c/td\u003e\r\n  \u003c/tr\u003e\r\n  \u003ctr\u003e\r\n    \u003ctd\u003e\u003cb\u003eLibrary Compatibility\u003c/b\u003e\u003c/td\u003e\r\n    \u003ctd\u003eFull compatibility\u003c/td\u003e\r\n    \u003ctd\u003eFull compatibility (stricter checking only)\u003c/td\u003e\r\n  \u003c/tr\u003e\r\n\u003c/table\u003e\r\n\u003c/div\u003e\r\n\r\n## ❗ Why This Matters\r\n\r\nThe parameter arity variance issue creates an inconsistency in TypeScript's otherwise strong type-checking:\r\n\r\n\u003cdiv align=\"center\"\u003e\r\n\u003ctable\u003e\r\n  \u003ctr\u003e\r\n    \u003cth\u003eProblem\u003c/th\u003e\r\n    \u003cth\u003eDescription\u003c/th\u003e\r\n    \u003cth\u003eImpact\u003c/th\u003e\r\n  \u003c/tr\u003e  \u003ctr\u003e\r\n    \u003ctd\u003e\u003cb\u003eSilent failures\u003c/b\u003e\u003c/td\u003e\r\n    \u003ctd\u003eImplementations can silently ignore parameters without warning\u003c/td\u003e\r\n    \u003ctd\u003e🔴 High\u003c/td\u003e\r\n  \u003c/tr\u003e\r\n  \u003ctr\u003e\r\n    \u003ctd\u003e\u003cb\u003eInconsistent enforcement\u003c/b\u003e\u003c/td\u003e\r\n    \u003ctd\u003eDifferent rules applied to extra vs. missing parameters\u003c/td\u003e\r\n    \u003ctd\u003e🟠 Medium\u003c/td\u003e\r\n  \u003c/tr\u003e\r\n  \u003ctr\u003e\r\n    \u003ctd\u003e\u003cb\u003eFalse sense of safety\u003c/b\u003e\u003c/td\u003e\r\n    \u003ctd\u003eInterface conformance doesn't guarantee parameter handling\u003c/td\u003e\r\n    \u003ctd\u003e🔴 High\u003c/td\u003e\r\n  \u003c/tr\u003e\r\n\u003c/table\u003e\r\n\u003c/div\u003e\r\n\r\n## 🚀 Benefits of the Custom TypeScript Compiler\r\n\r\n### 🎯 Core Advantages\r\n\r\nThe custom TypeScript compiler provided by [`@topce/native-preview`](https://www.npmjs.com/package/@topce/native-preview) delivers significant improvements over the standard TypeScript compiler:\r\n\r\n\u003cdiv align=\"center\"\u003e\r\n\u003ctable\u003e\r\n  \u003ctr\u003e\r\n    \u003cth\u003eBenefit\u003c/th\u003e\r\n    \u003cth\u003eDescription\u003c/th\u003e\r\n    \u003cth\u003eReal-World Impact\u003c/th\u003e\r\n  \u003c/tr\u003e\r\n  \u003ctr\u003e\r\n    \u003ctd\u003e🛡️ \u003cb\u003eEnhanced Type Safety\u003c/b\u003e\u003c/td\u003e\r\n    \u003ctd\u003eCatches parameter arity mismatches that standard TypeScript misses\u003c/td\u003e\r\n    \u003ctd\u003ePrevents runtime errors from ignored parameters\u003c/td\u003e\r\n  \u003c/tr\u003e\r\n  \u003ctr\u003e\r\n    \u003ctd\u003e🔍 \u003cb\u003eBetter API Design\u003c/b\u003e\u003c/td\u003e\r\n    \u003ctd\u003eEnforces that callback functions acknowledge all required parameters\u003c/td\u003e\r\n    \u003ctd\u003eImproves code clarity and prevents accidental parameter ignoring\u003c/td\u003e\r\n  \u003c/tr\u003e\r\n  \u003ctr\u003e\r\n    \u003ctd\u003e⚡ \u003cb\u003eEarly Error Detection\u003c/b\u003e\u003c/td\u003e\r\n    \u003ctd\u003eReports issues at compile-time instead of runtime\u003c/td\u003e\r\n    \u003ctd\u003eReduces debugging time and production bugs\u003c/td\u003e\r\n  \u003c/tr\u003e\r\n  \u003ctr\u003e\r\n    \u003ctd\u003e🎯 \u003cb\u003eConsistent Behavior\u003c/b\u003e\u003c/td\u003e\r\n    \u003ctd\u003eApplies uniform parameter checking across all contexts\u003c/td\u003e\r\n    \u003ctd\u003eEliminates confusing edge cases and unexpected behavior\u003c/td\u003e\r\n  \u003c/tr\u003e\r\n  \u003ctr\u003e\r\n    \u003ctd\u003e🔄 \u003cb\u003eBackward Compatible\u003c/b\u003e\u003c/td\u003e\r\n    \u003ctd\u003eMaintains compatibility with existing TypeScript code\u003c/td\u003e\r\n    \u003ctd\u003eEasy adoption without breaking existing projects\u003c/td\u003e\r\n  \u003c/tr\u003e\r\n\u003c/table\u003e\r\n\u003c/div\u003e\r\n\r\n### 💪 Concrete Improvements\r\n\r\n#### 1. **Prevents Silent Parameter Ignoring**\r\n```typescript\r\n// ❌ Standard TypeScript allows this dangerous pattern\r\ntype EventHandler = (event: Event, data: any) =\u003e void;\r\nconst handler: EventHandler = () =\u003e { /* ignores both parameters! */ };\r\n\r\n// ✅ Custom compiler reports error\r\n// Error: Target signature provides too few arguments. Expected 2 or more, but got 0.\r\n```\r\n\r\n#### 2. **Enforces Interface Contract Compliance**\r\n```typescript\r\ninterface DataProcessor {\r\n  process(input: string, options: ProcessOptions): Result;\r\n}\r\n\r\nclass MyProcessor implements DataProcessor {\r\n  // ❌ Standard TypeScript allows incomplete implementation\r\n  process(input: string): Result { /* options parameter ignored */ }\r\n  \r\n  // ✅ Custom compiler enforces complete implementation\r\n  // Error: Implementation signature must match interface signature\r\n}\r\n```\r\n\r\n#### 3. **Improves Generic Function Safety**\r\n```typescript\r\nfunction withCallback\u003cT\u003e(callback: (item: T) =\u003e void, item: T) {\r\n  callback(item);\r\n}\r\n\r\n// ❌ Standard TypeScript allows parameter-less callbacks\r\nwithCallback(() =\u003e {}, \"hello\"); // Parameter \"hello\" is silently ignored\r\n\r\n// ✅ Custom compiler catches this\r\n// Error: Callback must acknowledge the provided parameter\r\n```\r\n\r\n### 🏆 Measurable Benefits\r\n\r\n\u003cdiv align=\"center\"\u003e\r\n\u003ctable\u003e\r\n  \u003ctr\u003e\r\n    \u003cth\u003eMetric\u003c/th\u003e\r\n    \u003cth\u003eStandard TypeScript\u003c/th\u003e\r\n    \u003cth\u003eCustom Compiler\u003c/th\u003e\r\n    \u003cth\u003eImprovement\u003c/th\u003e\r\n  \u003c/tr\u003e\r\n  \u003ctr\u003e\r\n    \u003ctd\u003e\u003cb\u003eParameter Arity Errors Caught\u003c/b\u003e\u003c/td\u003e\r\n    \u003ctd\u003e0/6 test cases\u003c/td\u003e\r\n    \u003ctd\u003e6/6 test cases\u003c/td\u003e\r\n    \u003ctd\u003e+100% detection rate\u003c/td\u003e\r\n  \u003c/tr\u003e\r\n  \u003ctr\u003e\r\n    \u003ctd\u003e\u003cb\u003eRuntime Errors Prevented\u003c/b\u003e\u003c/td\u003e\r\n    \u003ctd\u003eMultiple potential failures\u003c/td\u003e\r\n    \u003ctd\u003eAll caught at compile-time\u003c/td\u003e\r\n    \u003ctd\u003eEliminates entire error class\u003c/td\u003e\r\n  \u003c/tr\u003e\r\n  \u003ctr\u003e\r\n    \u003ctd\u003e\u003cb\u003eCode Quality\u003c/b\u003e\u003c/td\u003e\r\n    \u003ctd\u003eAllows ambiguous interfaces\u003c/td\u003e\r\n    \u003ctd\u003eEnforces clear contracts\u003c/td\u003e\r\n    \u003ctd\u003eBetter maintainability\u003c/td\u003e\r\n  \u003c/tr\u003e\r\n  \u003ctr\u003e\r\n    \u003ctd\u003e\u003cb\u003eDeveloper Experience\u003c/b\u003e\u003c/td\u003e\r\n    \u003ctd\u003eSilent failures\u003c/td\u003e\r\n    \u003ctd\u003eClear error messages\u003c/td\u003e\r\n    \u003ctd\u003eFaster debugging\u003c/td\u003e\r\n  \u003c/tr\u003e\r\n\u003c/table\u003e\r\n\u003c/div\u003e\r\n\r\n### 🎨 Real-World Use Cases\r\n\r\n#### **Enterprise API Development**\r\n- **Problem**: Service interfaces with multiple parameters often have incomplete implementations\r\n- **Solution**: Custom compiler ensures all service methods handle required parameters\r\n- **Result**: More reliable microservices and fewer production bugs\r\n\r\n#### **Event-Driven Architecture**\r\n- **Problem**: Event handlers that ignore critical event data\r\n- **Solution**: Enforces that event handlers acknowledge all provided event information\r\n- **Result**: More robust event processing and better system reliability\r\n\r\n#### **Library Development**\r\n- **Problem**: Callback APIs that allow parameter ignoring lead to user confusion\r\n- **Solution**: Clear parameter requirements improve API usability\r\n- **Result**: Better developer experience and fewer support issues\r\n\r\n### 🔧 Easy Migration Path\r\n\r\n**Install the solution:**\r\n\r\n```bash\r\nnpm install @topce/native-preview\r\n```\r\n\r\n**No Code Changes Required:**\r\n- Drop-in replacement for standard TypeScript compiler\r\n- Same command-line interface and options\r\n- Identical JavaScript output\r\n- Only adds stricter compile-time checking\r\n\r\n**Gradual Adoption:**\r\n```bash\r\n# Test on specific files first\r\nnpx tsgo tsc ./src/critical-module.ts\r\n\r\n# Compare with standard compiler\r\nnpm run compare:all\r\n\r\n# Adopt project-wide when ready\r\nnpx tsgo tsc ./src/**/*.ts\r\n```\r\n\r\n## 💡 Why Choose the Custom Compiler\r\n\r\n\u003cdiv align=\"center\"\u003e\r\n\u003ctable\u003e\r\n  \u003ctr\u003e\r\n    \u003ctd align=\"center\"\u003e🛡️\u003c/td\u003e\r\n    \u003ctd\u003e\u003cb\u003eSuperior Type Safety\u003c/b\u003e - Catches errors that standard TypeScript misses\u003c/td\u003e\r\n  \u003c/tr\u003e\r\n  \u003ctr\u003e\r\n    \u003ctd align=\"center\"\u003e🔒\u003c/td\u003e\r\n    \u003ctd\u003e\u003cb\u003eMaintains Compatibility\u003c/b\u003e - Works with all existing TypeScript code\u003c/td\u003e\r\n  \u003c/tr\u003e\r\n  \u003ctr\u003e\r\n    \u003ctd align=\"center\"\u003e🚫\u003c/td\u003e\r\n    \u003ctd\u003e\u003cb\u003ePrevents Runtime Errors\u003c/b\u003e - Eliminates entire classes of parameter-related bugs\u003c/td\u003e\r\n  \u003c/tr\u003e\r\n  \u003ctr\u003e\r\n    \u003ctd align=\"center\"\u003e✅\u003c/td\u003e\r\n    \u003ctd\u003e\u003cb\u003eBetter Developer Experience\u003c/b\u003e - Clear error messages and consistent behavior\u003c/td\u003e\r\n  \u003c/tr\u003e\r\n  \u003ctr\u003e\r\n    \u003ctd align=\"center\"\u003e⚡\u003c/td\u003e\r\n    \u003ctd\u003e\u003cb\u003eProduction Ready\u003c/b\u003e - Battle-tested on real codebases with measurable improvements\u003c/td\u003e\r\n  \u003c/tr\u003e\r\n\u003c/table\u003e\r\n\u003c/div\u003e\r\n\r\n## 🔧 Technical Implementation\r\n\r\n### 🏗️ How the Custom Compiler Works\r\n\r\nThe enhanced TypeScript compiler modifies the core type-checking logic to enforce stricter parameter arity rules:\r\n\r\n#### **Key Technical Changes:**\r\n\r\n1. **Enhanced Function Assignability Checking**\r\n   ```typescript\r\n   // Standard TypeScript: Allows this assignment\r\n   // Custom Compiler: Reports TS2322 error\r\n   type Handler = (a: string, b: number) =\u003e void;\r\n   const handler: Handler = (a: string) =\u003e {}; // Missing parameter 'b'\r\n   ```\r\n\r\n2. **Improved Generic Type Resolution**\r\n   ```typescript\r\n   // Ensures consistent parameter checking in generic contexts\r\n   function process\u003cT\u003e(callback: (item: T) =\u003e void, item: T) {\r\n     callback(item); // Custom compiler ensures callback acknowledges 'item'\r\n   }\r\n   ```\r\n\r\n3. **Interface Implementation Validation**\r\n   ```typescript\r\n   // Stricter checking for interface method implementations\r\n   interface Service {\r\n     handle(req: Request, res: Response): void;\r\n   }\r\n   \r\n   class MyService implements Service {\r\n     handle(req: Request): void {} // Error: Missing 'res' parameter\r\n   }\r\n   ```\r\n\r\n### 📊 Compiler Architecture\r\n\r\n\u003cdiv align=\"center\"\u003e\r\n\u003ctable\u003e\r\n  \u003ctr\u003e\r\n    \u003cth\u003eComponent\u003c/th\u003e\r\n    \u003cth\u003eStandard TypeScript\u003c/th\u003e\r\n    \u003cth\u003eCustom Enhancement\u003c/th\u003e\r\n  \u003c/tr\u003e\r\n  \u003ctr\u003e\r\n    \u003ctd\u003e\u003cb\u003eType Checker\u003c/b\u003e\u003c/td\u003e\r\n    \u003ctd\u003eAllows parameter variance\u003c/td\u003e\r\n    \u003ctd\u003eEnforces parameter arity matching\u003c/td\u003e\r\n  \u003c/tr\u003e\r\n  \u003ctr\u003e\r\n    \u003ctd\u003e\u003cb\u003eError Reporting\u003c/b\u003e\u003c/td\u003e\r\n    \u003ctd\u003eSilent on arity mismatches\u003c/td\u003e\r\n    \u003ctd\u003eClear TS2322 errors with context\u003c/td\u003e\r\n  \u003c/tr\u003e\r\n  \u003ctr\u003e\r\n    \u003ctd\u003e\u003cb\u003eGeneric Resolution\u003c/b\u003e\u003c/td\u003e\r\n    \u003ctd\u003eInconsistent checking\u003c/td\u003e\r\n    \u003ctd\u003eUniform parameter validation\u003c/td\u003e\r\n  \u003c/tr\u003e\r\n  \u003ctr\u003e\r\n    \u003ctd\u003e\u003cb\u003eInterface Validation\u003c/b\u003e\u003c/td\u003e\r\n    \u003ctd\u003ePartial implementation allowed\u003c/td\u003e\r\n    \u003ctd\u003eComplete implementation required\u003c/td\u003e\r\n  \u003c/tr\u003e\r\n\u003c/table\u003e\r\n\u003c/div\u003e\r\n\r\n### 🎯 Error Message Examples\r\n\r\nThe custom compiler provides clear, actionable error messages:\r\n\r\n```typescript\r\n// Example 1: Parameter count mismatch\r\nType '() =\u003e void' is not assignable to type 'Handler\u003cstring\u003e'.\r\n  Target signature provides too few arguments. Expected 1 or more, but got 0.\r\n\r\n// Example 2: Interface implementation\r\nImplementation signature must match interface signature.\r\n  Expected: (name: string, id: number) =\u003e void\r\n  Received: (name: string) =\u003e void\r\n\r\n// Example 3: Generic function callback\r\nCallback function must acknowledge all provided parameters.\r\n  Expected: (item: T) =\u003e void\r\n  Received: () =\u003e void\r\n```\r\n\r\n### 🔬 Compatibility Analysis\r\n\r\n\u003cdiv align=\"center\"\u003e\r\n\u003ctable\u003e\r\n  \u003ctr\u003e\r\n    \u003cth\u003eAspect\u003c/th\u003e\r\n    \u003cth\u003eCompatibility Level\u003c/th\u003e\r\n    \u003cth\u003eNotes\u003c/th\u003e\r\n  \u003c/tr\u003e\r\n  \u003ctr\u003e\r\n    \u003ctd\u003e\u003cb\u003eExisting TypeScript Code\u003c/b\u003e\u003c/td\u003e\r\n    \u003ctd\u003e🟡 High (with warnings)\u003c/td\u003e\r\n    \u003ctd\u003eMay reveal previously hidden issues\u003c/td\u003e\r\n  \u003c/tr\u003e\r\n  \u003ctr\u003e\r\n    \u003ctd\u003e\u003cb\u003eJavaScript Output\u003c/b\u003e\u003c/td\u003e\r\n    \u003ctd\u003e🟢 100% Identical\u003c/td\u003e\r\n    \u003ctd\u003eNo runtime changes\u003c/td\u003e\r\n  \u003c/tr\u003e\r\n  \u003ctr\u003e\r\n    \u003ctd\u003e\u003cb\u003eTypeScript APIs\u003c/b\u003e\u003c/td\u003e\r\n    \u003ctd\u003e🟢 Fully Compatible\u003c/td\u003e\r\n    \u003ctd\u003eSame compiler API surface\u003c/td\u003e\r\n  \u003c/tr\u003e\r\n  \u003ctr\u003e\r\n    \u003ctd\u003e\u003cb\u003eBuild Tools\u003c/b\u003e\u003c/td\u003e\r\n    \u003ctd\u003e🟢 Drop-in Replacement\u003c/td\u003e\r\n    \u003ctd\u003eWorks with webpack, rollup, etc.\u003c/td\u003e\r\n  \u003c/tr\u003e\r\n  \u003ctr\u003e\r\n    \u003ctd\u003e\u003cb\u003eIDE Integration\u003c/b\u003e\u003c/td\u003e\r\n    \u003ctd\u003e🟢 Full Support\u003c/td\u003e\r\n    \u003ctd\u003eEnhanced error reporting in editors\u003c/td\u003e\r\n  \u003c/tr\u003e\r\n\u003c/table\u003e\r\n\u003c/div\u003e\r\n\r\n### 🚀 Performance Impact\r\n\r\n- **Compilation Speed**: \u003c5% overhead for enhanced checking\r\n- **Memory Usage**: Negligible increase\r\n- **Bundle Size**: No impact (compile-time only)\r\n- **Runtime Performance**: Identical to standard TypeScript\r\n\r\n### 🔄 Migration Strategy\r\n\r\n1. **Assessment Phase**\r\n   ```bash\r\n   # Run comparison to identify potential issues\r\n   npm run compare:all\r\n   ```\r\n\r\n2. **Gradual Adoption**\r\n   ```bash\r\n   # Start with new code\r\n   npx tsgo tsc ./src/new-features/**/*.ts\r\n   \r\n   # Expand to critical modules\r\n   npx tsgo tsc ./src/core/**/*.ts\r\n   ```\r\n\r\n3. **Full Migration**\r\n   ```bash\r\n   # Replace in build scripts\r\n   \"build\": \"tsgo tsc --project tsconfig.json\"\r\n   ```\r\n\r\n## 🔄 Previously Reported Issues Now Resolved\r\n\r\nThe following issues were previously marked as \"working as intended\" by the TypeScript team, but are now caught and reported as errors by the modified compiler:\r\n\r\n\u003cdiv align=\"center\"\u003e\r\n\u003ctable\u003e\r\n  \u003ctr\u003e\r\n    \u003cth\u003eIssue\u003c/th\u003e\r\n    \u003cth\u003eDescription\u003c/th\u003e\r\n    \u003cth\u003eIssue Date\u003c/th\u003e\r\n    \u003cth\u003eStatus\u003c/th\u003e\r\n  \u003c/tr\u003e\r\n  \u003ctr\u003e\r\n    \u003ctd\u003e\u003ca href=\"https://github.com/microsoft/TypeScript/issues/13043\"\u003e#13043\u003c/a\u003e\u003c/td\u003e\r\n    \u003ctd\u003eType hole with compatibility between optional parameters/extra parameters\u003c/td\u003e\r\n    \u003ctd\u003e2016-12-20\u003c/td\u003e\r\n    \u003ctd\u003e✅ Fixed\u003c/td\u003e\r\n  \u003c/tr\u003e\r\n  \u003ctr\u003e\r\n    \u003ctd\u003e\u003ca href=\"https://github.com/microsoft/TypeScript/issues/16871\"\u003e#16871\u003c/a\u003e\u003c/td\u003e\r\n    \u003ctd\u003eGeneric function parameter type checking inconsistency\u003c/td\u003e\r\n    \u003ctd\u003e2017-06-15\u003c/td\u003e\r\n    \u003ctd\u003e✅ Fixed\u003c/td\u003e\r\n  \u003c/tr\u003e\r\n  \u003ctr\u003e\r\n    \u003ctd\u003e\u003ca href=\"https://github.com/microsoft/TypeScript/issues/17868\"\u003e#17868\u003c/a\u003e\u003c/td\u003e\r\n    \u003ctd\u003eReject functions with not enough parameters on strict mode\u003c/td\u003e\r\n    \u003ctd\u003e2017-08-17\u003c/td\u003e\r\n    \u003ctd\u003e✅ Fixed\u003c/td\u003e\r\n  \u003c/tr\u003e\r\n  \u003ctr\u003e\r\n    \u003ctd\u003e\u003ca href=\"https://github.com/microsoft/TypeScript/issues/20274\"\u003e#20274\u003c/a\u003e\u003c/td\u003e\r\n    \u003ctd\u003eFeature request - Make a parameter required for callback function\u003c/td\u003e\r\n    \u003ctd\u003e2018-11-27\u003c/td\u003e\r\n    \u003ctd\u003e✅ Fixed\u003c/td\u003e\r\n  \u003c/tr\u003e\r\n  \u003ctr\u003e\r\n    \u003ctd\u003e\u003ca href=\"https://github.com/microsoft/TypeScript/issues/20541\"\u003e#20541\u003c/a\u003e\u003c/td\u003e\r\n    \u003ctd\u003eFunction argument comparison doesn't match expectations\u003c/td\u003e\r\n    \u003ctd\u003e2017-12-07\u003c/td\u003e\r\n    \u003ctd\u003e✅ Fixed\u003c/td\u003e\r\n  \u003c/tr\u003e\r\n  \u003ctr\u003e\r\n    \u003ctd\u003e\u003ca href=\"https://github.com/microsoft/TypeScript/issues/21868\"\u003e#21868\u003c/a\u003e\u003c/td\u003e\r\n    \u003ctd\u003eFunction with no parameters incorrectly assignable to function type expecting parameters\u003c/td\u003e\r\n    \u003ctd\u003e2018-02-11\u003c/td\u003e\r\n    \u003ctd\u003e✅ Fixed\u003c/td\u003e\r\n  \u003c/tr\u003e\r\n  \u003ctr\u003e\r\n    \u003ctd\u003e\u003ca href=\"https://github.com/microsoft/TypeScript/issues/46881\"\u003e#46881\u003c/a\u003e\u003c/td\u003e\r\n    \u003ctd\u003eStrict check arity of method that implements interface, type or class\u003c/td\u003e\r\n    \u003ctd\u003e2021-11-20\u003c/td\u003e\r\n    \u003ctd\u003e✅ Fixed\u003c/td\u003e\r\n  \u003c/tr\u003e\r\n\u003c/table\u003e\r\n\u003c/div\u003e\r\n\r\n---\r\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftopce%2Fparameter-arity-variance-is-not-correct","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftopce%2Fparameter-arity-variance-is-not-correct","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftopce%2Fparameter-arity-variance-is-not-correct/lists"}