{"id":28401573,"url":"https://github.com/codeismyid/types-testing","last_synced_at":"2026-03-09T01:32:14.233Z","repository":{"id":292418848,"uuid":"980865240","full_name":"codeismyid/types-testing","owner":"codeismyid","description":"Test TypeScript types at test runner runtime - Works seamlessly with Jest, Vitest, and Bun.","archived":false,"fork":false,"pushed_at":"2026-03-08T08:03:56.000Z","size":442,"stargazers_count":0,"open_issues_count":27,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-03-08T12:43:14.358Z","etag":null,"topics":["bun","jest","tests","ts-jest","type-testing","types-test","typescript","unit-testing","vitest"],"latest_commit_sha":null,"homepage":"","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/codeismyid.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":".github/CODEOWNERS","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":"2025-05-09T21:14:28.000Z","updated_at":"2025-05-09T21:42:10.000Z","dependencies_parsed_at":"2025-12-18T16:05:46.563Z","dependency_job_id":null,"html_url":"https://github.com/codeismyid/types-testing","commit_stats":null,"previous_names":["codeismyid/types-testing"],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/codeismyid/types-testing","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/codeismyid%2Ftypes-testing","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/codeismyid%2Ftypes-testing/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/codeismyid%2Ftypes-testing/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/codeismyid%2Ftypes-testing/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/codeismyid","download_url":"https://codeload.github.com/codeismyid/types-testing/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/codeismyid%2Ftypes-testing/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":30279777,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-08T20:45:49.896Z","status":"ssl_error","status_checked_at":"2026-03-08T20:45:49.525Z","response_time":56,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6: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":["bun","jest","tests","ts-jest","type-testing","types-test","typescript","unit-testing","vitest"],"created_at":"2025-06-01T13:00:21.226Z","updated_at":"2026-03-09T01:32:14.193Z","avatar_url":"https://github.com/codeismyid.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cdiv align=\"center\"\u003e\n  \n# types-testing\n\nTest TypeScript types at test runner runtime - Works seamlessly with Jest, Vitest, and Bun.\n\n[![License](https://img.shields.io/github/license/codeismyid/types-testing?style=flat-square\u0026color=blue)](/LICENSE)\n[![NPM Latest](https://img.shields.io/npm/v/types-testing.svg?style=flat-square\u0026color=blue)](https://www.npmjs.com/package/types-testing)\n[![NPM Downloads](https://img.shields.io/npm/dt/types-testing.svg?style=flat-square\u0026color=blue)](https://www.npmjs.com/package/types-testing)\n[![NPM Min Size](https://img.shields.io/bundlejs/size/types-testing?style=flat-square\u0026color=blue)](https://www.npmjs.com/package/types-testing)\n\n[![CI](https://img.shields.io/github/actions/workflow/status/codeismyid/types-testing/ci.yaml?style=flat-square\u0026logo=github\u0026label=CI\u0026labelColor=383f47)](https://github.com/codeismyid/types-testing/actions/workflows/ci.yaml)\n[![CodeQL](https://img.shields.io/github/actions/workflow/status/codeismyid/types-testing/codeql.yaml?style=flat-square\u0026logo=github\u0026label=CodeQL\u0026labelColor=383f47)](https://github.com/codeismyid/types-testing/actions/workflows/codeql.yaml)\n[![Codecov](https://img.shields.io/codecov/c/github/codeismyid/types-testing?style=flat-square\u0026logo=codecov\u0026label=Coverage\u0026labelColor=383f47)](https://app.codecov.io/github/codeismyid/types-testing)\n[![Type Coverage](https://img.shields.io/badge/dynamic/json.svg?style=flat-square\u0026logo=typescript\u0026label=Coverage\u0026labelColor=383f47\u0026color=44cc11\u0026prefix=≥\u0026suffix=%\u0026query=$.typeCoverage.atLeast\u0026uri=https://github.com/codeismyid/types-testing/raw/main/package.json)](https://github.com/codeismyid/types-testing)\n\n\u003c/div\u003e\n\n- **Types Testing**: Ensures TypeScript types or definitions are tested.\n- **Readable Tests**: Uses the expect-assertion style for clean and easy-to-read types testing.\n- **Variative Assertions**: Provides assertions like `toBe`, `toBeNever`, `toBeUnknown`, `toBeVoid`, `toBeAny`, and more for checking.\n- **Framework Agnostic**: Seamlessly works with [Jest (TypeScript)](https://jestjs.io/docs/getting-started#using-typescript), [Vitest](https://vitest.dev/), [Bun Test](https://bun.sh/docs/cli/test), and other TypeScript testing frameworks.\n- **Easy Integration**: Integrates smoothly into TypeScript testing frameworks.\n- **No Special Comments Needed**: No need to add special comment like `@ts-expect-error`, just write clean and readable types tests code inside the existing test suite.\n- **Runtime Stack Traces**: Offers detailed stack traces for failed tests.\n\n#### Example Showcases\n\nHere is an example of how `types-testing` tests TypeScript types or definitions ([sources](https://github.com/codeismyid/types-testing/tree/main/__tests__/__example])):\n\n```ts\n// example.test.ts\nimport { join } from 'node:path';\nimport { TypesTesting } from 'src';\nimport exampleModule from './example-module';\nimport * as ExampleTypes from './example-types';\n\nif (process.versions.bun) {\n  let bunTest = (await import('bun:test')).default;\n\n  if (!bunTest) {\n    bunTest = await import('bun:test');\n  }\n\n  global.describe = bunTest.describe as unknown as typeof global.describe;\n  global.test = bunTest.test as unknown as typeof global.test;\n} else if (process.env.VITEST) {\n  const vitest = await import('vitest');\n  global.describe = vitest.describe as unknown as typeof global.describe;\n  global.test = vitest.test as unknown as typeof global.test;\n}\n\nconst basePath = join(process.cwd(), '__tests__/__example');\nconst { expectType } = new TypesTesting({\n  basePath,\n  tsConfig: 'tsconfig.json'\n}).prepare();\n\ndescribe('example-module', () =\u003e {\n  test(`exampleModule.name type is 'example-module'`, () =\u003e {\n    // using runtime argument\n    expectType(exampleModule.name).toBe\u003c'example-module'\u003e();\n    expectType(exampleModule.name).toBeStringLiteral();\n\n    // using type argument\n    expectType\u003ctypeof exampleModule.name\u003e().toBe\u003c'example-module'\u003e();\n    expectType\u003ctypeof exampleModule.name\u003e().toBeString();\n  });\n\n  test(`exampleModule.getName type is function without parameter and return 'example-module'`, () =\u003e {\n    // using runtime argument\n    expectType(exampleModule.getName).toBe\u003c() =\u003e 'example-module'\u003e();\n    expectType(exampleModule.getName).toBe\u003c{\n      (): 'example-module';\n    }\u003e();\n    expectType(exampleModule.getName()).toBe\u003c'example-module'\u003e();\n\n    // using type argument\n    expectType\u003ctypeof exampleModule.getName\u003e().toBe\u003c() =\u003e 'example-module'\u003e();\n    expectType\u003ctypeof exampleModule.getName\u003e().toBe\u003c{\n      (): 'example-module';\n    }\u003e();\n    expectType\u003c\n      ReturnType\u003ctypeof exampleModule.getName\u003e\n    \u003e().toBe\u003c'example-module'\u003e();\n  });\n\n  if (process.env.FAIL_EXAMPLE_TEST) {\n    test('fail example', () =\u003e {\n      expectType(exampleModule.name).toBe\u003cstring\u003e();\n    });\n  }\n});\n\ndescribe('example-types', () =\u003e {\n  test('KeyOf is utility types for getting keys from object type', () =\u003e {\n    expectType\u003cExampleTypes.KeyOf\u003c{ a: 1; b: 2; c: 3 }\u003e\u003e().toBe\u003c\n      'a' | 'b' | 'c'\n    \u003e();\n  });\n\n  if (process.env.FAIL_EXAMPLE_TEST) {\n    test('fail example', () =\u003e {\n      expectType\u003cExampleTypes.KeyOf\u003c{ a: 1; b: 2; c: 3 }\u003e\u003e().toBe\u003c1 | 2 | 3\u003e();\n    });\n  }\n});\n\n// example-module.js\nexport default {\n  name: 'example-module',\n  getName(){\n    return this.name;\n  }\n};\n\n// example-module.d.ts\ndeclare const exampleModule: {\n  name: 'example-module';\n  getName(): 'example-module';\n}\n\nexport default exampleModule;\n\n// example-types.ts\nexport type KeyOf\u003cT\u003e = T extends T ? keyof T : never;\n```\n\n\u003cdetails open\u003e\n\u003csummary\u003eResult from Jest (29.7.0)\u003c/summary\u003e\n\n```\n FAIL  __tests__/__example/example.test.ts\n  example-module\n    √ exampleModule.name type is 'example-module' (12 ms)\n    √ exampleModule.getName type is function without parameter and return 'example-module' (5 ms)\n    × fail example (2 ms)\n  example-types\n    √ KeyOf is utility types for getting keys from object type (1 ms)\n    × fail example (1 ms)\n\n  ● example-module › fail example\n\n    TypesTestingError: expectType\u003creceived\u003e().toBe\u003cexpected\u003e()\n\n    Expected type: string\n    Received type: \"example-module\"\n\n\n      56 |   if (process.env.FAIL_EXAMPLE_TEST) {\n      57 |     test('fail example', () =\u003e {\n    \u003e 58 |       expectType(exampleModule.name).toBe\u003cstring\u003e();\n         |                                      ^\n      59 |     });\n      60 |   }\n      61 | });\n\n      at Object.\u003canonymous\u003e (__tests__/__example/example.test.ts:58:38)\n\n  ● example-types › fail example\n\n    TypesTestingError: expectType\u003creceived\u003e().toBe\u003cexpected\u003e()\n\n    Expected type: 1 | 2 | 3\n    Received type: \"a\" | \"b\" | \"c\"\n\n\n      70 |   if (process.env.FAIL_EXAMPLE_TEST) {\n      71 |     test('fail example', () =\u003e {\n    \u003e 72 |       expectType\u003cExampleTypes.KeyOf\u003c{ a: 1; b: 2; c: 3 }\u003e\u003e().toBe\u003c1 | 2 | 3\u003e();\n         |                                                              ^\n      73 |     });\n      74 |   }\n      75 | });\n\n      at Object.\u003canonymous\u003e (__tests__/__example/example.test.ts:72:62)\n\nTest Suites: 1 failed, 1 total\nTests:       2 failed, 3 passed, 5 total\nSnapshots:   0 total\nTime:        2.336 s, estimated 3 s\n```\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003eResult from Vitest (3.1.1)\u003c/summary\u003e\n\n```\n RUN  v3.1.2 /@codeismyid/types-testing\n\n ❯ __tests__/__example/example.test.ts (5 tests | 2 failed) 12ms\n   ✓ example-module \u003e exampleModule.name type is 'example-module' 6ms\n   ✓ example-module \u003e exampleModule.getName type is function without parameter and return 'example-module' 2ms\n   × example-module \u003e fail example 2ms\n     → expectType\u003creceived\u003e().toBe\u003cexpected\u003e()\n\nExpected type: string\nReceived type: \"example-module\"\n\n   ✓ example-types \u003e KeyOf is utility types for getting keys from object type 0ms\n   × example-types \u003e fail example 1ms\n     → expectType\u003creceived\u003e().toBe\u003cexpected\u003e()\n\nExpected type: 1 | 2 | 3\nReceived type: \"a\" | \"b\" | \"c\"\n\n\n⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ Failed Tests 2 ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯\n\n FAIL  __tests__/__example/example.test.ts \u003e example-module \u003e fail example\nTypesTestingError: expectType\u003creceived\u003e().toBe\u003cexpected\u003e()\n\nExpected type: string\nReceived type: \"example-module\"\n\n ❯ __tests__/__example/example.test.ts:55:38\n     56|   if (process.env.FAIL_EXAMPLE_TEST) {\n     57|     test('fail example', () =\u003e {\n     58|       expectType(exampleModule.name).toBe\u003cstring\u003e();\n       |                                      ^\n     59|     });\n     60|   }\n\n⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[1/2]⎯\n\n FAIL  __tests__/__example/example.test.ts \u003e example-types \u003e fail example\nTypesTestingError: expectType\u003creceived\u003e().toBe\u003cexpected\u003e()\n\nExpected type: 1 | 2 | 3\nReceived type: \"a\" | \"b\" | \"c\"\n\n ❯ __tests__/__example/example.test.ts:69:62\n     70|   if (process.env.FAIL_EXAMPLE_TEST) {\n     71|     test('fail example', () =\u003e {\n     72|       expectType\u003cExampleTypes.KeyOf\u003c{ a: 1; b: 2; c: 3 }\u003e\u003e().toBe\u003c1 | 2 | 3\u003e();\n       |                                                              ^\n     73|     });\n     74|   }\n\n⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[2/2]⎯\n\n\n Test Files  1 failed (1)\n      Tests  2 failed | 3 passed (5)\n   Start at  21:39:24\n   Duration  2.78s (transform 185ms, setup 0ms, collect 2.33s, tests 12ms, environment 0ms, prepare 122ms)\n```\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003eResult from Bun Test (1.1.42)\u003c/summary\u003e\n\n```\nbun test v1.1.42 (50eec002)\n\n__tests__/__example/example.test.ts:\n✓ example-module \u003e exampleModule.name type is 'example-module' [16.00ms]\n✓ example-module \u003e exampleModule.getName type is function without parameter and return 'example-module' [15.00ms]\n53 |     \u003e().toBe\u003c'example-module'\u003e();\n54 |   });\n55 |\n56 |   if (process.env.FAIL_EXAMPLE_TEST) {\n57 |     test('fail example', () =\u003e {\n58 |       expectType(exampleModule.name).toBe\u003cstring\u003e();\n                                          ^\nTypesTestingError: expectType\u003creceived\u003e().toBe\u003cexpected\u003e()\n\nExpected type: string\nReceived type: \"example-module\"\n\n      at /@codeismyid/types-testing/__tests__/__example/example.test.ts:58:38\n✗ example-module \u003e fail example [16.00ms]\n✓ example-types \u003e KeyOf is utility types for getting keys from object type\n67 |     \u003e();\n68 |   });\n69 |\n70 |   if (process.env.FAIL_EXAMPLE_TEST) {\n71 |     test('fail example', () =\u003e {\n72 |       expectType\u003cExampleTypes.KeyOf\u003c{ a: 1; b: 2; c: 3 }\u003e\u003e().toBe\u003c1 | 2 | 3\u003e();\n                                                                  ^\nTypesTestingError: expectType\u003creceived\u003e().toBe\u003cexpected\u003e()\n\nExpected type: 1 | 2 | 3\nReceived type: \"a\" | \"b\" | \"c\"\n\n      at /@codeismyid/types-testing/__tests__/__example/example.test.ts:72:62\n✗ example-types \u003e fail example [16.00ms]\n\n 3 pass\n 2 fail\nRan 5 tests across 1 files. [2.09s]\n```\n\u003c/details\u003e\n\n\n## Installation\n\n```bash\n# NPM\nnpm install --save-dev types-testing\n\n# BUN\nbun add -d types-testing\n```\n\n\n## Usage\n\n#### Default Options\n\n```ts\nimport { expectType } from 'types-testing';\n\ndescribe('test', () =\u003e {\n  test('test', () =\u003e {\n    expectType\u003cstring\u003e().toBe\u003cstring\u003e();\n  });\n});\n```\n\u003e Note: `prepare` function get invoked when `expectType` is called at the first time with `process.cwd()` as base path and `tsconfig.json` as TypeScript configuration file.\n\n#### Custom Typescript Configuration File \n\n```ts\nimport { expectType, prepare } from 'types-testing';\n\nprepare({ basePath: 'this/is/basepath', tsConfig: 'tsconfig.test.json' });\n\ndescribe('test', () =\u003e {\n  test('test', () =\u003e {\n    expectType\u003cstring\u003e().toBe\u003cstring\u003e();\n  });\n});\n```\n\n#### Extending Typescript Configuration File\n\n```ts\nimport { expectType, prepare } from 'types-testing';\n\nprepare({\n  basePath: 'this/is/basepath',\n  tsConfig: 'tsconfig.test.json',\n  compilerOptions: {\n    // add ts compiler options to extends typescript compiler options from tsconfig file\n  },\n  files: [\n    // add included files to extends included files from tsconfig file\n  ],\n  projectReferences: [\n    // add project references to extends project references from tsconfig file.\n  ]\n});\n\ndescribe('test', () =\u003e {\n  test('test', () =\u003e {\n    expectType\u003cstring\u003e().toBe\u003cstring\u003e();\n  });\n});\n```\n\n#### Configuration Without Typescript Configuration File \n\n```ts\nimport { expectType, prepare } from 'types-testing';\n\nprepare({\n  compilerOptions: {\n    // add ts compiler options\n  },\n  files: [\n    // add included files\n  ]\n})\n\ndescribe('test', () =\u003e {\n  test('test', () =\u003e {\n    expectType\u003cstring\u003e().toBe\u003cstring\u003e();\n  });\n});\n```\n\n#### Custom Instance\n\n```ts\nimport { TypesTesting } from 'types-testing';\n\nconst { expectType, prepare } = new TypesTesting({ \n  autoPrepare: false,\n  basePath: process.cwd(), \n  tsConfig: 'tsconfig.test.json' \n});\n\ndescribe('test', () =\u003e {\n  beforeAll(()=\u003e{\n    prepare();\n  });\n\n  test('test', () =\u003e {\n    expectType\u003cstring\u003e().toBe\u003cstring\u003e();\n  });\n});\n```\n\n\n## Developed With\n\n- [Typescript](https://www.typescriptlang.org/) - Strongly typed programming language that builds on JavaScript.\n- [Bun](https://bun.sh/) - All-in-one JavaScript runtime \u0026 toolkit designed for speed, complete with a bundler, test runner, and Node.js-compatible package manager.\n\n\n## License\n\nThe code in this project is released under the [MIT License](LICENSE).","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcodeismyid%2Ftypes-testing","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcodeismyid%2Ftypes-testing","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcodeismyid%2Ftypes-testing/lists"}