diff --git a/lint-rules/require-playground-link.js b/lint-rules/require-playground-link.js new file mode 100644 index 000000000..07d21d237 --- /dev/null +++ b/lint-rules/require-playground-link.js @@ -0,0 +1,118 @@ +import lzString from 'lz-string'; +import outdent from 'outdent'; + +const CODEBLOCK_REGEX = /(?```(?:ts|typescript)?)(?[\s\S]*?)```/g; +const PLAYGROUND_BASE_URL = 'https://www.typescriptlang.org/play/?exactOptionalPropertyTypes=true#code/'; + +const generatePlaygroundLink = code => { + const zippedCode = lzString.compressToEncodedURIComponent(code); + return `${PLAYGROUND_BASE_URL}${zippedCode}`; +}; + +export const generateLinkText = code => `[Playground Link](${generatePlaygroundLink(code)})`; + +const getCodeIndent = code => { + const line = code.split('\n').filter(Boolean); // eslint-disable-line unicorn/prefer-array-find + const firstLine = line[0]; + const leadingSpaces = firstLine.slice(0, firstLine.length - firstLine.trimStart().length); + return leadingSpaces; +}; + +export const requirePlaygroundLinkRule = /** @type {const} */ ({ + meta: { + type: 'suggestion', + docs: { + description: 'Ensures JSDoc example codeblocks for publicly available types have playground links.', + }, + fixable: 'code', + messages: { + missingPlaygroundLink: 'Example codeblocks must have an associated playground link. Add the following after the example codeblock:\n\n[Playground Link]({{playgroundLink}})\n\n', + incorrectPlaygroundLink: 'Incorrect playground link. Update the link to the following:\n{{playgroundLink}}', + }, + schema: [], + }, + defaultOptions: [], + create(context) { + return { + TSTypeAliasDeclaration(node) { + const {parent} = node; + + // Skip if type is not exported or starts with an underscore (private/internal) + if (parent.type !== 'ExportNamedDeclaration' || node.id.name.startsWith('_')) { + return; + } + + const previousNodes = [context.sourceCode.getTokenBefore(parent, {includeComments: true})]; + + // Handle JSDoc blocks for options + if (node.id.name.endsWith('Options') && node.typeAnnotation.type === 'TSTypeLiteral') { + for (const member of node.typeAnnotation.members) { + previousNodes.push(context.sourceCode.getTokenBefore(member, {includeComments: true})); + } + } + + for (const previousNode of previousNodes) { + // Skip if previous node is not a JSDoc comment + if (!previousNode || previousNode.type !== 'Block' || !previousNode.value.startsWith('*')) { + continue; + } + + const comment = previousNode.value; + + for (const match of comment.matchAll(CODEBLOCK_REGEX)) { + const {code, openingFence} = match.groups ?? {}; + + // Skip empty code blocks + if (!code || !openingFence) { + continue; + } + + const nextLineIndex = match.index + match[0].length + 1; // +1 to move past the newline + const nextLine = comment.slice(nextLineIndex).split('\n')[0]; + + const playgroundLink = generatePlaygroundLink(outdent.string(code)); + const indentation = getCodeIndent(code); + const insertText = `${indentation}${generateLinkText(outdent.string(code))}`; + + if (nextLine === insertText) { + continue; + } + + const codeblockStart = previousNode.range[0] + match.index + 2; + + const fixerRangeStart = previousNode.range[0] + nextLineIndex + 2; + const fixerRangeEnd = fixerRangeStart + nextLine.length; + + const doesPlaygroundLinkExist = nextLine.includes('[Playground Link]'); + + // For missing link, highlight the opening fence, and for incorrect link, highlight the link line + const errorStart = doesPlaygroundLinkExist ? fixerRangeStart : codeblockStart; + const errorEnd = doesPlaygroundLinkExist ? fixerRangeEnd : codeblockStart + openingFence.length; + + context.report({ + loc: { + start: context.sourceCode.getLocFromIndex(errorStart), + end: context.sourceCode.getLocFromIndex(errorEnd), + }, + messageId: doesPlaygroundLinkExist + ? 'incorrectPlaygroundLink' + : 'missingPlaygroundLink', + data: { + playgroundLink, + }, + fix(fixer) { + return fixer.replaceTextRange( + [ + fixerRangeStart, // Start is inclusive. + doesPlaygroundLinkExist ? fixerRangeEnd : fixerRangeStart, // End is exclusive. If start and end are the same, it inserts at that position. + ], + insertText + (doesPlaygroundLinkExist ? '' : '\n'), + ); + }, + }); + } + } + }, + }; + }, +}); diff --git a/lint-rules/require-playground-link.test.js b/lint-rules/require-playground-link.test.js new file mode 100644 index 000000000..e2ea721ad --- /dev/null +++ b/lint-rules/require-playground-link.test.js @@ -0,0 +1,217 @@ +import outdent from 'outdent'; +import {createRuleTester, dedenter, exportType, exportTypeAndOption, fence, jsdoc} from './test-utils.js'; +import {generateLinkText, requirePlaygroundLinkRule} from './require-playground-link.js'; + +const ruleTester = createRuleTester(); + +const fenceWithLink = (code, lang = '', linkCode = code) => + outdent` + ${fence(code, lang)} + ${generateLinkText(linkCode)} + `; + +const missingPlaygroundLinkError = getPrefixes => { + // Track the number of times `fence` is called to determine the no. of errors + let callCount = 0; + const trackedFence = (...args) => { + callCount++; + return fence(...args); + }; + + return { + // Codeblocks in input code don't have playground links + code: exportTypeAndOption(...getPrefixes(trackedFence)), + // Create two error objects for each `fence` call (one for type and one for option) + errors: Array.from({length: callCount * 2}, () => ({messageId: 'missingPlaygroundLink'})), + // Codeblocks in output code have playground links + output: exportTypeAndOption(...getPrefixes(fenceWithLink)), + }; +}; + +const incorrectPlaygroundLinkError = getPrefixes => { + // Track the number of times `fence` is called to determine the no. of errors + let callCount = 0; + const trackedFenceWithIncorrectLink = (code, lang) => { + callCount++; + return fenceWithLink(code, lang, code + '\n// incorrect'); + }; + + return { + // Codeblocks in input code have incorrect playground links + code: exportTypeAndOption(...getPrefixes(trackedFenceWithIncorrectLink)), + // Create two error objects for each `fence` call (one for type and one for option) + errors: Array.from({length: callCount * 2}, () => ({messageId: 'incorrectPlaygroundLink'})), + // Codeblocks in output code have correct playground links + output: exportTypeAndOption(...getPrefixes(fenceWithLink)), + }; +}; + +// Code samples +const code1 = outdent` + type A = string; + //=> string + + type B = number; + //=> number +`; + +const code2 = outdent` + type T1 = { + foo: string; + bar: number; + }; + + type T2 = T1[keyof T1]; + //=> string | number +`; + +ruleTester.run('require-playground-link', requirePlaygroundLinkRule, { + valid: [ + // Not exported + dedenter` + ${jsdoc(fence(code1))} + type NotExported = string; + `, + dedenter` + type NotExportedOptions = { + ${jsdoc(fence(code1))} + p1: string; + } + `, + + // Internal (leading underscore) + dedenter` + ${jsdoc(fence(code1))} + export type _Internal = string; + `, + dedenter` + export type _InternalOptions = { + ${jsdoc(fence(code1))} + p1: string; + } + `, + + // Without `Options` suffix + dedenter` + export type NoSuffix = { + ${jsdoc(fence(code1))} + p1: string; + } + `, + + // No JSDoc + exportTypeAndOption(''), + exportType('type Some = number;'), + exportTypeAndOption('// Not block comment'), + exportTypeAndOption('/* Block comment, but not JSDoc */'), + + // No codeblock in JSDoc + exportType(jsdoc('No codeblock here')), + + // Valid link + exportTypeAndOption(jsdoc(fenceWithLink(code1))), + + // With text before and after + exportTypeAndOption(jsdoc('Some description.', fenceWithLink(code1), '@category Test')), + + // With line breaks before and after + exportTypeAndOption( + jsdoc('Some description.\n', 'Note: Some note.\n', fenceWithLink(code1, 'ts'), '\n@category Test'), + ), + + // With `@example` tag + exportTypeAndOption(jsdoc('@example', fenceWithLink(code1))), + + // With language specifiers + exportTypeAndOption(jsdoc(fenceWithLink(code1, 'ts'))), + exportTypeAndOption(jsdoc(fenceWithLink(code1, 'typescript'))), + + // Multiple code blocks + exportTypeAndOption( + jsdoc('@example', fenceWithLink(code1, 'ts'), '\nSome text in between.\n', '@example', fenceWithLink(code2)), + ), + + // Multiple exports and multiple properties + exportTypeAndOption(jsdoc(fenceWithLink(code1)), jsdoc(fenceWithLink(code2))), + ], + invalid: [ + // Missing link + missingPlaygroundLinkError(fence => [jsdoc(fence(code1))]), + + // With text before and after + missingPlaygroundLinkError(fence => [jsdoc('Some description.', fence(code1), '@category Test')]), + + // With line breaks before and after + missingPlaygroundLinkError(fence => [ + jsdoc('Some description.\n', 'Note: Some note.\n', fence(code1, 'ts'), '\n@category Test'), + ]), + + // With `@example` tag + missingPlaygroundLinkError(fence => [jsdoc('@example', fence(code1))]), + + // With language specifiers + missingPlaygroundLinkError(fence => [jsdoc(fence(code1, 'ts'))]), + missingPlaygroundLinkError(fence => [jsdoc(fence(code1, 'typescript'))]), + + // Multiple code blocks + missingPlaygroundLinkError(fence => [ + jsdoc('@example', fence(code1, 'ts'), '\nSome text in between.\n', '@example', fence(code2)), + ]), + + // Multiple exports and multiple properties + missingPlaygroundLinkError(fence => [jsdoc(fence(code1)), jsdoc(fence(code2))]), + + // Incorrect existing link + incorrectPlaygroundLinkError(fence => [jsdoc(fence(code1))]), + + // Fix indentation + { + code: exportTypeAndOption(jsdoc(fence(code1), '\t' + generateLinkText(code1))), + output: exportTypeAndOption(jsdoc(fenceWithLink(code1))), + errors: [{messageId: 'incorrectPlaygroundLink'}, {messageId: 'incorrectPlaygroundLink'}], + }, + { + code: exportTypeAndOption(jsdoc(dedenter` + 1. First point + ${fence(code1)} + ${generateLinkText(code1)} + `)), + output: exportTypeAndOption(jsdoc(dedenter` + 1. First point + ${fence(code1)} + ${generateLinkText(code1)} + `)), + errors: [{messageId: 'incorrectPlaygroundLink'}, {messageId: 'incorrectPlaygroundLink'}], + }, + + // Empty link + { + code: exportTypeAndOption(jsdoc(fence(code1), '[Playground Link]()')), + output: exportTypeAndOption(jsdoc(fenceWithLink(code1))), + errors: [{messageId: 'incorrectPlaygroundLink'}, {messageId: 'incorrectPlaygroundLink'}], + }, + + // With text before and after + incorrectPlaygroundLinkError(fence => [jsdoc('Some description.', fence(code1), '@category Test')]), + + // With line breaks before and after + incorrectPlaygroundLinkError(fence => [ + jsdoc('Some description.\n', 'Note: Some note.\n', fence(code1, 'ts'), '\n@category Test'), + ]), + + // With `@example` tag + incorrectPlaygroundLinkError(fence => [jsdoc('@example', fence(code1))]), + + // With language specifiers + incorrectPlaygroundLinkError(fence => [jsdoc(fence(code1, 'ts'))]), + incorrectPlaygroundLinkError(fence => [jsdoc(fence(code1, 'typescript'))]), + + // Multiple code blocks + incorrectPlaygroundLinkError(fence => [ + jsdoc('@example', fence(code1, 'ts'), '\nSome text in between.\n', '@example', fence(code2)), + ]), + + // Multiple exports and multiple properties + incorrectPlaygroundLinkError(fence => [jsdoc(fence(code1)), jsdoc(fence(code2))]), + ], +}); diff --git a/package.json b/package.json index 4b8082a55..4717995ac 100644 --- a/package.json +++ b/package.json @@ -59,7 +59,9 @@ "@typescript/vfs": "^1.6.1", "dedent": "^1.7.0", "expect-type": "^1.2.2", + "lz-string": "^1.5.0", "npm-run-all2": "^8.0.4", + "outdent": "^0.8.0", "tsd": "^0.33.0", "typescript": "^5.9.2", "xo": "^1.2.2" diff --git a/source/all-extend.d.ts b/source/all-extend.d.ts index ea0623474..c47f2d1f8 100644 --- a/source/all-extend.d.ts +++ b/source/all-extend.d.ts @@ -47,6 +47,7 @@ export type AllExtendOptions = { type H = AllExtend<[never, 1], never, {strictNever: false}>; //=> false ``` + [Playground Link](https://www.typescriptlang.org/play/?exactOptionalPropertyTypes=true#code/JYWwDg9gTgLgBDAnmApnA3gQQDbYKIAeMKAdgCYC+cAZlBCHAORKoC01KAzjIwNwBQ-FmkxwAvHBz4ipMgB4A2gEYANHABMakigBuKKAF0tAVxAAjfWvTcowAMYwAcrv0AuBFGMoKAPgEB6fzEfGgBDbE4UQWE4ACFxSVxCYnJFVQ0tF0MTc0sMG3snLPdqcMjfAKCQmE8ooWQ0AGEEqWTZRW09KEyuozhOvOsawucu9xqvCv5A4I8vaIa4ABEWpJlUhQHu-qy+rasCh1G3MIjvP2mqubqYvFXpFPkFRlDGNUYzN53etVCSRAOwyOxWuUxm1VqC1QcAAYvc2hsXl8Pl8tn0-gD8kCimNTuULuDrlC0ABxeHrJ77OBKPZZQG2YG4ibnSqzUpnYlwAAS5MeHTp1NpXXpIxB7PxrJC4pQQA) */ strictNever?: boolean; }; @@ -74,6 +75,7 @@ type C = AllExtend<[number, number | string], number>; type D = AllExtend<[true, boolean, true], true>; //=> boolean ``` +[Playground Link](https://www.typescriptlang.org/play/?exactOptionalPropertyTypes=true#code/JYWwDg9gTgLgBDAnmApnA3gQQDbYKIAeMKAdgCYC+cAZlBCHAORKoC01KAzjIwNwBQ-FmkxwAvHBz4ipMgB4A2gEYANHABMagMwBdNSQCuIAEYooAPgEB6K2PMIoBlIOFwAQuMm5CxcotUaaoxajHpwhiZmlvw2djQAhticzkLIaADCnlI+sooRplD6RgVwAD5w3FDAJADmYflR1rb2xhAQ2CjxJC5pcAAiWd4yfgowjihqre2dJGpjTmHzKNGxLW0dXUA) Note: Behaviour of optional elements depend on the `exactOptionalPropertyTypes` compiler option. When the option is disabled, the target type must include `undefined` for a successful match. @@ -92,6 +94,7 @@ type B = AllExtend<[1?, 2?, 3?], number>; type C = AllExtend<[1?, 2?, 3?], number | undefined>; //=> true ``` +[Playground Link](https://www.typescriptlang.org/play/?exactOptionalPropertyTypes=true#code/JYWwDg9gTgLgBDAnmApnA3gQQDbYKIAeMKAdgCYC+cAZlBCHAORKoC01KAzjIwNwBQ-APRC4AAxQEAhgGMYAeTAxgEElOwAFOqliIAKsi5i4pKQCNsKMvxZpMcALxwc+IqTIAeANoBGAPwANHAATIFwAMx+ALpBJACuIGYoUAB8AiIOKQhQcSiCIuKSsgpKKmqa2slIBqicxmTAnOaW1rZwAEKOzriExOTe-kGhQZExcPGJyWnCQpk06px5M4XScorKqupaEDrVhnVwDU0WVjaGcADCXS697gNhwxHRsQlJUHAAPnBx5CjUwCQrNMMlkYDkUEA) @see {@link AllExtendOptions} diff --git a/source/all-union-fields.d.ts b/source/all-union-fields.d.ts index 3f45f134a..29b3b2feb 100644 --- a/source/all-union-fields.d.ts +++ b/source/all-union-fields.d.ts @@ -62,6 +62,7 @@ function displayPetInfoWithAllUnionFields(petInfo: AllUnionFields) { console.log('animal type: ', petInfo.catType ?? petInfo.dogType); } ``` +[Playground Link](https://www.typescriptlang.org/play/?exactOptionalPropertyTypes=true#code/JYWwDg9gTgLgBDAnmApnA3gQQDbYKoB2wEBAYsCtgCYDOAvnAGZQQhwDkSqAtIyjTHYBuAFAiuaAMIBDeAF4MIgJAFpIFAC44AqMAIBzUUolb2AY1nDlFmABVkm7TF0HRdUeIdwAIhH1wFdGVVdS0dPUNlEw4qPyslWP17VDDnCLcPRgBXAjMYYgI4KmAaMGxpRAAFFBgASQJGCAAKVDqGiC0ZeAAfHz8ASkUlAHphhAcIRjhW+saAgD5lUaHllTVHcNclseMHUxt41ZtkjbStkbGGXqCLuDXQpxdI292UmLijVcST1KfPy7ESjMJBoEGwKAAdNg-E12CFHOwADTTGqzCAQ+H9IzAgig8FQmGcPYcZEzdoQiRYwHLE4AZTMujA8GB4HKehocGkACMIFl4AADY4OfmcghUOD877CuAECDwFAADxK+QMcBI41QEq6cF6vn0-Ih2zgAAEYDRuIrUHkLVAWFBrCCwZDofpYdIiCBpNgNQjSajyULNQB+IMotqNCFS1BUuhibK5fLq4qlcpVf2NADqwBgAAscPgiCRyJRaC10x04PnCAVi9QaAAebW6vzzQY3ZYSSZhtELI3tnbw37pI2vBEHHXvfSHHaBlBBofnL5+E7zx7D26xh24p0E11w9amP3h9GY7GO-Eu2HRJHd8mUjy3AByEDgdIZwCZcBQtughqB5+dQl3VAL0fUPW8I1nOAQwg9EoxQGMgA) @see {@link SharedUnionFields} diff --git a/source/and.d.ts b/source/and.d.ts index 5e6d8b759..72834d78b 100644 --- a/source/and.d.ts +++ b/source/and.d.ts @@ -21,6 +21,7 @@ type FT = And; type FF = And; //=> false ``` +[Playground Link](https://www.typescriptlang.org/play/?exactOptionalPropertyTypes=true#code/JYWwDg9gTgLgBDAnmApnA3gQQHYBMC+cAZlBCHAORKoC0RKAzjBQNwBQb1aAKt3ALxwcuADwwoAVxQAaBJJQA+dgHpl-BXKkcucbgDEBQvGPmyiAQwA2DRSrUaL1lNuRo9fQcJGObs8VKU2VXViKxsXVDg9A09jHxlQp0DghzCUIA) Note: When `boolean` is passed as an argument, it is distributed into separate cases, and the final result is a union of those cases. For example, `And` expands to `And | And`, which simplifies to `true | false` (i.e., `boolean`). @@ -44,6 +45,7 @@ type D = And; type E = And; //=> boolean ``` +[Playground Link](https://www.typescriptlang.org/play/?exactOptionalPropertyTypes=true#code/JYWwDg9gTgLgBDAnmApnA3gQQHYBMC+cAZlBCHAORKoC0RKAzjBQNwBQb1amcAvHDlwAeGFACuKADRwARhAgAbFAENsAPnYB6TbzWz5S1Ry5wAQnwF4hcxSuzTREjW2279to52RoAwhcFCRMoKDFLuhupaOnpBISjG3nAAIv5WNhHSsaHOrjHBoQmocACiqcLpdtIVqjnR4XZAA) Note: If either of the types is `never`, the result becomes `false`. @@ -72,6 +74,7 @@ type F = And; type G = And; //=> false ``` +[Playground Link](https://www.typescriptlang.org/play/?exactOptionalPropertyTypes=true#code/JYWwDg9gTgLgBDAnmApnA3gQQHYBMC+cAZlBCHAORKoC0RKAzjBQNwBQb1amcAvHDlwAeGFACuKADRxsKAG4ooAPnYB6VbyXEAhgBsGKDlzgAhPgLxDZCqNNESVbdZp37DnZGgDC5wUKJ6BtLWio7OWgFuRp5wACK+liG2rgZhGhGB7sYAognCAEYQELoo2tjB8qFq6SlZMQBieVaVyYXFpdhpLpEG0ahwAOJNSRU2XRluQA) @see {@link Or} @see {@link Xor} diff --git a/source/array-element.d.ts b/source/array-element.d.ts index 58e0ef2a4..af6cb816e 100644 --- a/source/array-element.d.ts +++ b/source/array-element.d.ts @@ -32,6 +32,7 @@ declare function getRandomElement(array: T): Array getRandomElement(['foo', 'bar', 'baz'] as const); //=> 'foo' | 'bar' | 'baz' ``` +[Playground Link](https://www.typescriptlang.org/play/?exactOptionalPropertyTypes=true#code/JYWwDg9gTgLgBDAnmApnA3gQSlAhogUQBsUQUA7GAXzgDMoIQ4ByJVAWlpQGcZmBuAFCCA9CLjY8iboLZoAyjCjByAc0n44AXgk58xUhRgAeXsrUBtALoA+IWK024ZlauFi4AFQCuYEjLkvXxJtXSkDMkpjCwBGABo4ACYEgGZbexFHOBi4AB8kvLgU93FPZBR2blwuWXK4ADkIGA1EUJaIo2N0XAAuZyVXKjtRTKdyFAA3FCgSuAAFPABjGGBF3CI4FAAPXHASQQATFEWiXCg0Wm9yZeAIcjhVFBgAJVxyA8YOqM9NrZgKA7cODnXAfchEVpXADW5AgAHdyNYbAAKM5SPqeACUfXaJEiJk8w0Ejxebw+IC+MGRFmYtAgEGYCWYACMzoyWKyAF7MKxwXBAxZ3XiYjJZWn05iFFlsqVc5hAA) @see {@link ArrayValues} - For directly extracting values from a constant array type. @see {@link IterableElement} - For iterables like `Set`, `Map`, and generators (not suitable for all use cases due to different inference behavior). diff --git a/source/array-indices.d.ts b/source/array-indices.d.ts index f3c262ee8..7a0fece36 100644 --- a/source/array-indices.d.ts +++ b/source/array-indices.d.ts @@ -14,6 +14,7 @@ type WeekdayName = ArrayValues; const getWeekdayName = (day: Weekday): WeekdayName => weekdays[day]; ``` +[Playground Link](https://www.typescriptlang.org/play/?exactOptionalPropertyTypes=true#code/JYWwDg9gTgLgBDAnmApnA3gQSlAhogSQDsATYAYxQGcAaObPRANVwBsBXagXzgDMoIIOAHIkqALS9qMYQG4AUPPIQiVeAHcUKANYl8VOAF44AbWEBZFXsTC6wgCqcq12yIDqKEkWou79gBbsUM74rsIAYlDAviIAyrgwQTHCseykoQC6cLgGyqowCvJiaB461kb0OPjEZJRUADzFELxwmmX6AHwKxXCluvgAcrggaMYM+Cwc1I3IKM2tWv2IVF2KeWpwAOYoMH3WQyMVABTWAFy9i9YAlOd7g8OjHQvtyybWGbJAA) @see {@link ArrayValues} diff --git a/source/array-slice.d.ts b/source/array-slice.d.ts index da6849325..db019275a 100644 --- a/source/array-slice.d.ts +++ b/source/array-slice.d.ts @@ -53,6 +53,7 @@ slice[2].a; // @ts-expect-error -- TS2493: Tuple type '[1, "2", {readonly a: 3}]' of length '3' has no element at index '3'. slice[3]; ``` +[Playground Link](https://www.typescriptlang.org/play/?exactOptionalPropertyTypes=true#code/JYWwDg9gTgLgBDAnmApnA3gQSlAhogZQBtgBjFAXzgDMoIQ4ByJVAWmpQGcZGBuAKH4s0AFQAMcALxxseQiXIAeANpiANHACMGgEwaAzBoAsAXQB8AgPSXJZuKo3a4euIbinBwuCM1SZOfGIyFBV1LV0DYxMNMNZNC35rW3swpxd9E09kUR0-WUCFEIdw50j3aJLWHQSku2U0zKFs7308gPlg0McI1yiNKuMamzqMrNRvIza5IKVitLLTfpc4oeTlUabxkQBWKYLOuZ63RbhYgE4L1brG6gBXADtSGGAIe7hcdpmQ-gBIUlfuP45AB9OAoAAeMBQ9wAJpw4FAULgYa8iIg4A8ANb3CAAd3uymivwIMA+8AhUNh8PutxAACMUFA-OpfgBRWFgyHQuFwGn0xl7RDA5SMIjQgDmMAAFowiWYABQfOQALiB+GBGm4ZIA-KqSWSNNzdXB2TCAJQYX6ImC3KBvJX4AB0nEK8q1sENsItuHh+Q6Sj9Grg+o9JthCQogn+90BLuCfgd-pQ8vqGkYOkYGnQuFV+goGmURg02xMFVimjNAk2KAg1DgcfIVmG9ic6czGARSJR9zR71zvDgFEaDZQyh0JkduCbyX0gmscAAAjBOKwIagnqucNA4KxWN4CDojGd9KqRLcwGKEM1GKm4AAiHR3rOI5Go9E51xDxhwWtwMX3SUpSYfRvylH1eQgMExRAaF4FweBgFhCFgMYR1+BHdYTF4IA) @category Array */ diff --git a/source/array-splice.d.ts b/source/array-splice.d.ts index bdd2e4472..cbe79fd3d 100644 --- a/source/array-splice.d.ts +++ b/source/array-splice.d.ts @@ -86,6 +86,7 @@ type SomeMonths2 = ['January', 'Foo', 'April']; type Months2 = ArraySplice; //=> ['January', 'Feb', 'March', 'April']; ``` +[Playground Link](https://www.typescriptlang.org/play/?exactOptionalPropertyTypes=true#code/JYWwDg9gTgLgBDAnmApnA3gQSlAhogZTABtgBjFAXzgDMoIQ4ByJVAWhpQGcYmBuAFADWaAgxQBZCADsYACy4AGOAF44AbSYApXNICuuKIiYAaZpjBRgxU8y17pKJgF1BIuFNkLla7HkIk5CgAPGIgkjLySmYAjGaKZpoAYigARrZMEoZkci4AfIIA9IUqeRraugZGGSnpZpnZufUWVjb19o4ugsLIouKeUTGq5Tr6hsbNltYZHU6uPagekQpDvjj4RKQUof3LXHFwBzEFAsWlI5XjMw5z3e5hEV5cAEzDmqNVE8xJEBAZLdN5u4BgpXmt-JsgjtwiCXrF4eVahkslAcvkiiUyu9LtV6kj6ii0ZNWl0gA) @category Array */ diff --git a/source/array-tail.d.ts b/source/array-tail.d.ts index 8e874ef8d..a36f933fa 100644 --- a/source/array-tail.d.ts +++ b/source/array-tail.d.ts @@ -30,6 +30,7 @@ type F = ArrayTail; type G = ArrayTail; //=> readonly [...string[], 1, 2] ``` +[Playground Link](https://www.typescriptlang.org/play/?exactOptionalPropertyTypes=true#code/JYWwDg9gTgLgBDAnmApnA3gQSlAhogFV2ABsBfOAMyghDgHIlUBaSlAZxnoG4AoXpmkxwAvHGx5CxEgB4A2gEYANHABMKgMwBdAHx8A9PpE64c9XG39BcAEKjxOfEVIyoKXABMIAOxKJTymqaugZGJm6ePn6m5pYCyGgAwvYSTtLygbEA-CoAdPmcUMDeAOZyWiG8hsYxmjlw+bmFxWUVVglwACIpjlIuEV6+-oqV1eHug9Hl7ahwAKI9ks6y5XpVYaZaM2gAYotpLs2lq6E1R63bcADi+32yA1HDjeflKpmjGw9Dps8wRcdaN4qVRaIA) @example ``` @@ -48,6 +49,7 @@ declare function searchBooks(genre: string, minRating: number, available: boolea const availableTopSciFi = curry(searchBooks)('sci-fi')(4.5)(true); //=> string[] ``` +[Playground Link](https://www.typescriptlang.org/play/?exactOptionalPropertyTypes=true#code/JYWwDg9gTgLgBDAnmApnA3gQSlAhogFV2ABsBfOAMyghDgHIlUBaSlAZxnoG4AoXpmgDCAVxyIAPADERAOwDGAPjgBeODIVwUADxgpZAE3ZwAFADoLuAOZQRIfTHYB9AFxxgstlDjYrdh+wAlKrKHl5wAEooMGKyvACQAPw+UH72so5auvpGcFAouAYQsiSIcADaALoJSZHRsTVuJta26TBuvv4Z7OUADJXBKsqi4hLmljZdjq4peITEJBKdbeyKg8pRMVCyiglusigAbihQfLwGKPIkuPlUcvIwwMVw8mJQkhryWXqGxp+PxUUJkosjcn0CbhG72k90UZwuVxuaEo9wBsjg7AKUHkAAsAEIQCAAa3YJis+nybk4UA8VgANHAQB4IrhHrIrPs7AAjE4M3CHBa4LkkFBuLmEkW4WQQjEwGnsqpneTFThwfmC4UoAgQMAAZXkwCkwFULzeiBMmJuuIJxKCJno7ANrGA9ECJgALGYAKxuuUiFCBPgAeiDQ1l8qsVSAA) @category Array */ diff --git a/source/array-values.d.ts b/source/array-values.d.ts index 9cde345ef..4ea8031b8 100644 --- a/source/array-values.d.ts +++ b/source/array-values.d.ts @@ -14,6 +14,7 @@ type Weekday = ArrayIndices; const getWeekdayName = (day: Weekday): WeekdayName => weekdays[day]; ``` +[Playground Link](https://www.typescriptlang.org/play/?exactOptionalPropertyTypes=true#code/JYWwDg9gTgLgBDAnmApnA3gQSlAhogNVwBsBXFAZwBo5s9EBJAOwBNgBjSgXzgDMoIIOAHIkqALS9KMYQG4AUPPYQmFeAHcUKANYt8FOAF44AbWEBZFXsTCawgCrkK12yIDqKFk0ou79gBakUM74rsIAYlDAviIAyrgwQTHCsaSsoQC6cLgGyqowCvJiaB461gByuCBoxnT4RGSUADzFELxwmmX6AHwKxXCluvhGtDj4zGycFC3IKG0dWkOIFL2KeWpwAOYoMIMVVTVwABTWAFwDi9YAlOd7+JXVRt0LXcsm1hmyQA) @see {@link ArrayIndices} diff --git a/source/arrayable.d.ts b/source/arrayable.d.ts index 985392b5c..98eac1859 100644 --- a/source/arrayable.d.ts +++ b/source/arrayable.d.ts @@ -20,6 +20,7 @@ function bundle(input: string, output: Arrayable) { bundle('src/index.js', 'dist/index.js'); bundle('src/index.js', ['dist/index.cjs', 'dist/index.mjs']); ``` +[Playground Link](https://www.typescriptlang.org/play/?exactOptionalPropertyTypes=true#code/JYWwDg9gTgLgBDAnmApnA3gQSlAho3AIwBsUBfOAMyghDgHIlUBaSlAZxnoG4AoXygFcAdgGMYwCMLiERAE1IAKYMLCCYALjicoKgOYAaOBHVrNcbHgIkUAHh36AfAEoMvAJCipnY6fUAZYB8AXgscfAA6IMt8RRMYM1cAfl8E9TgtAG14swBdPg8AekK4QDICfndKaDhFL2EfHPSISlSzQM5XdA9PbwhSCOIIPUUAAwB3XRg0ABJ0FTMKGAgtWcaYMhHnPncyXl3eWWEFFEV6dihRQpU5FAAPCIArdnojejkgmCuju8fnrYP5Eozhcvjd7k8XnBMm8PqCfqIIa93pw4fcQBDclsgA) @category Array */ diff --git a/source/async-return-type.d.ts b/source/async-return-type.d.ts index e401a3460..58f605daf 100644 --- a/source/async-return-type.d.ts +++ b/source/async-return-type.d.ts @@ -19,6 +19,7 @@ declare function doSomething(value: Value): void; asyncFunction().then(value => doSomething(value)); ``` +[Playground Link](https://www.typescriptlang.org/play/?exactOptionalPropertyTypes=true#code/JYWwDg9gTgLgBDAnmApnA3gQQM6IHYDGASijAK5R4AqyKAvnAGZQQhwDkSqAtIytjHYBuAFAiAJigIAbAIZQ0jMoRjAIeOLNyEAYsoKr1ACgCUALjgAFFiGDYUAHnSMIECwKjA8AczoA+UREAeiC4KgALOwRaOAVsCGkAN34ECARwtGUAdyhZMFRxWNIKDS40CEY4AAMtfAI9FTU8KoA6ETK4ADVZaTI0AF44HDqSckoaVAcyis1tev1DPADgoP6-DBc3OA8vXzFJGXlFBaa4cQgAZVZSSJ8jRJ6+i27elHM4RIhgcUDa3RPjCYWjAMnh7o8ButzlcQDdduDXiYTEIgA) @category Async */ diff --git a/source/asyncify.d.ts b/source/asyncify.d.ts index 7a91a13e2..0d669ca17 100644 --- a/source/asyncify.d.ts +++ b/source/asyncify.d.ts @@ -17,6 +17,7 @@ declare function loadConfigSync(path: string): Config; type LoadConfigAsync = Asyncify; //=> (path: string) => Promise ``` +[Playground Link](https://www.typescriptlang.org/play/?exactOptionalPropertyTypes=true#code/JYWwDg9gTgLgBDAnmApnA3gQQM6IHYDGwAZogL5zFQQhwDkSqAtMStjHQNwBQ3A9HzgBlfAQAW1PBACu2StMIxgEPN0ZoAwiuLAA5nAC8GVgEMY0qCgBiAGxO7sALjgAlFAWgATADzsowPF0AGjgAIwgIGxQTPAA+Mh5uT3c7S3lFZTw4GwgTTy08HV0RQgAKMDMxZz8A3QBKZwKixPU4ABlc-O09HFFDOF7CEkRvdQhibM6mvRKCWJ4BA1i4csrqmH9AusNlgAVqEGBsFG9p3VigA) @category Async */ diff --git a/source/camel-case.d.ts b/source/camel-case.d.ts index 6a03ded81..9571bb452 100644 --- a/source/camel-case.d.ts +++ b/source/camel-case.d.ts @@ -76,6 +76,7 @@ const dbResult: CamelCasedProperties = { otherField: false }; ``` +[Playground Link](https://www.typescriptlang.org/play/?exactOptionalPropertyTypes=true#code/JYWwDg9gTgLgBDAnmApnA3gYQIYhQGxwGcUBfOAMyghDgHIlUBaClImOgbgChuB6PnADKoMPhS8AxhAB27OERooAatijBsAI3EAuODjyFsJADx0KECE01q6APjgBeehYgAhWz2lz4YKGxQoADcUTFkSSQBXGGAQgFUwVChJYxQ9AwJiFDNXJjcAQQAla2wALzoAGgw-AODQ8JQomPjEwJSSPRgoSLIHZ3NLAsKPcp5+QXyAEyDsGUkUSd5GNAyjEkmABWokmLYTABU+jG4ASABtAGk4YBk4AGsURAgKOH24Y31cTNSTC7sAXT0+0u-24pDGNxggQo2HmcEK2AA7gB5MAxcLHE50SZQRBMboyOh6TSWcSzHhYiiRfD4AD6MJAwHwiFpMi+RIUXRuAHMKa49DJIiBNIEKUM9Ox1DJeacAIpxABatPlAA0BUKRVAKXRkfsABIAUWKADEAJIGgAyABEOSSIGSZDxSFJwvBJppCmxqTB0l81gsthAdsA9giUWjgOEjuhTjjEIVIjJOt0UBVTlSacbcEzEAA5L56Og2KAAOgAVkRKunLHoAIwAJgAzGmTsXC64qycAI6RUqyyIADz0ADYWxAYAALQLGkP4SZ6GH4EhgzhAA) @category Change case @category Template literal diff --git a/source/camel-cased-properties-deep.d.ts b/source/camel-cased-properties-deep.d.ts index 8d0acb0d3..f4f341964 100644 --- a/source/camel-cased-properties-deep.d.ts +++ b/source/camel-cased-properties-deep.d.ts @@ -49,6 +49,7 @@ const preserveConsecutiveUppercase: CamelCasedPropertiesDeep<{fooBAR: {fooBARBiz }, }; ``` +[Playground Link](https://www.typescriptlang.org/play/?exactOptionalPropertyTypes=true#code/JYWwDg9gTgLgBDAnmApnA3gYQIYhQGxwGcUATABSglVmBSIBEUUwBfOAMypDgHIlUAWg70YvANwAoScAB2MFFA7YAxmgCqJKBkkBITYoCSpAFxxZAVxAAjRVP1aAcrhRmiMKHIDmU1tLkKSqoaWgDqwDAAFgBiniiypEQ6DkayHBBmBlD2WbF0CUSZWgDaALq+0ioQsu5wUPQW+DBmOHiE2CQUVDQwdIzMYAA8WeFRefGJAHxwALzJFlqGaRnJugtGpnAAjAA0emtOLma8ACoQILx7uqxX61DjBWbF++j7BxtmAExXuu9QznhjgApRRQRCXfY3F5vO7GMwAZh+fwBrj4AGUwMAANYoCG-KG6Up7VhSSRVGrwMD1LQANxQmGqJBUFl6dPUYBoKg6qNaBGIZEo1EUvXoTBYg3Q6QgACEAIIAJTMkogMoV0uAAC8nsrVfLpdgtXB3J5ZF5WKVWDcMFT6Io6QyaihmayUOzOdyzB4LChWNM5q9dFK5YrVkG1ZrtW8w3qDcdjd48dciXooSSgA) @category Change case @category Template literal diff --git a/source/camel-cased-properties.d.ts b/source/camel-cased-properties.d.ts index a5688ada2..4f2066792 100644 --- a/source/camel-cased-properties.d.ts +++ b/source/camel-cased-properties.d.ts @@ -27,6 +27,7 @@ const preserveConsecutiveUppercase: CamelCasedProperties<{fooBAR: string}, {pres fooBAR: 'string', }; ``` +[Playground Link](https://www.typescriptlang.org/play/?exactOptionalPropertyTypes=true#code/JYWwDg9gTgLgBDAnmApnA3gYQIYhQGxwGcUATABSglVmBSIF84AzKkOAciVQFpn6YHANwAoEcAB2MFFGbYAxmgCqJKBhEBIFTICSpAFxwJAVxAAjGaK2qAcrhSGiMKJIDmohmPkQJTuFHpjfBhDHDxCbBIKKhoYOiIAHm0oAD44AF51DWNVPUMARgAaTRyZOzxDDgAVCBAOYoZREW9feDAA1QA3FEwfEnljOO6lMBp5SIc4MIJiMkpqGTj6BPRmCAgAIQBBACVHZzcGQox2+hlu3t8UAaGUEbGJw2djFAY0zPRNNc3dyqcXCSueoiRpAA) @category Change case @category Template literal diff --git a/source/characters.d.ts b/source/characters.d.ts index 2b0be6848..8200646f2 100644 --- a/source/characters.d.ts +++ b/source/characters.d.ts @@ -11,6 +11,7 @@ const b: UppercaseLetter = 'a'; // Invalid // @ts-expect-error const c: UppercaseLetter = 'AB'; // Invalid ``` +[Playground Link](https://www.typescriptlang.org/play/?exactOptionalPropertyTypes=true#code/JYWwDg9gTgLgBDAnmApnA3gVTKqBjAQwGcUAZFGGFKAXzgDMoIQ4ByJVAWnpSJlYDcAKCF4IAOz5wCALjjZchEuUrU4AXjYBBQXDgB6fXABqBADbAAJkMNwAAjCKcUAD1R4YzqEyiiJUgCM5BWolMgoqKA02Al0DIwBJcQA3cysbIwcnV3dPah8-SXg8YJxQ4nDVKM1WLQAhXVsk1ItLIA) @category Type */ @@ -27,6 +28,7 @@ const a: LowercaseLetter = 'a'; // Valid // @ts-expect-error const b: LowercaseLetter = 'A'; // Invalid ``` +[Playground Link](https://www.typescriptlang.org/play/?exactOptionalPropertyTypes=true#code/JYWwDg9gTgLgBDAnmApnA3gGQgdxVAYwEMBnFTFGGfAXzgDMoIQ4ByJVAWnpRJlYDcAKCEEIAOz5wiALjjY8hUuUrUocALxsiguAHo9cAGpEANsAAmQg3AACMEpxQAPVARhOoTKKIlSARnIK+MRkFFT4mmwAgro2AJLiAG5mlkA) @category Type */ @@ -43,6 +45,7 @@ const a: DigitCharacter = '0'; // Valid // @ts-expect-error const b: DigitCharacter = 0; // Invalid ``` +[Playground Link](https://www.typescriptlang.org/play/?exactOptionalPropertyTypes=true#code/JYWwDg9gTgLgBDAnmApnA3gEWAc2DAYQAsBDKEgYxhSgF84AzKCEOAciVQFoGUBnGGwDcAKBEUIAOwFwSALjjY8hUuSo04AXnYAGYXAD0BuADUSAG2AATEUbgABGHy4oAHqiouozKOKkyAIwUlfGIySmooLTgdITh4uwBJSQA3C2sgA) @category Type */ @@ -59,6 +62,7 @@ const a: Alphanumeric = 'A'; // Valid // @ts-expect-error const b: Alphanumeric = '#'; // Invalid ``` +[Playground Link](https://www.typescriptlang.org/play/?exactOptionalPropertyTypes=true#code/JYWwDg9gTgLgBDAnmApnA3gQQDZgBYCGAdgK4gpTADGAvnAGZQQhwDkSqAtPSgM4ysA3AChhVCEX5wCALjg58xMhWpwAvG0xC4Aeh1wAagWzAAJsL1wAAjF6cUAD1RUY9qEyhiJUgEZyFhKTklFTqbADE2pYAkkQAbsZmQA) @category Type */ diff --git a/source/conditional-except.d.ts b/source/conditional-except.d.ts index 5449550b4..ddb6578c8 100644 --- a/source/conditional-except.d.ts +++ b/source/conditional-except.d.ts @@ -19,6 +19,7 @@ class Awesome { type ExceptPrimitivesFromAwesome = ConditionalExcept; //=> {run: () => void} ``` +[Playground Link](https://www.typescriptlang.org/play/?exactOptionalPropertyTypes=true#code/JYWwDg9gTgLgBDAnmApnA3gBSqYNgBuKANHAMIQB2AJnsFQIYA2AogB4DGKYMAvnADMoEEHADkSVAFoBKAM4wxAbgBQKjkwZy5cAIIB3eSLToVASA5UFUAK4cY0ABRgbAIybAOcSgxAoAXHDWwJQA5qQu7p5Bdlza8oGUNiCuKFARbh5eAgzATDZQCXCuwKEhMACUGLxqZraUjlXoNTUqkmjsXDzYuPhEcgBiwiAGRn5wALzkVLT4jKyc3DAAPKNyxqQ9IHREAHyqAPQHE7sY9YGNk6cEEMDUvEA) @example ``` @@ -34,6 +35,7 @@ interface Example { type NonStringKeysOnly = ConditionalExcept; //=> {b: string | number; c: () => void; d: {}} ``` +[Playground Link](https://www.typescriptlang.org/play/?exactOptionalPropertyTypes=true#code/JYWwDg9gTgLgBDAnmApnA3gYQgOwCbAzC4CGANgKIAeAximDAL5wBmUEIcA5EqgLQsUAZxhcA3ACgJwHDBRQWJOnGolwZNOgkBIEgC44IqDIDmk7QCMDR03AA+cHAFcQF+eZoGAFAEo4AXgA+OAA3CGA8czwDdEZJRileNAA5XABlGGMcEwBpFEQhAHkcMkQAuGx8QmIccmo6BgAeVXUUABpDTNNAyQB6XqCMK06sk3tHFzcoMThPOF8A4LCImeiMRkYgA) @category Object */ diff --git a/source/conditional-keys.d.ts b/source/conditional-keys.d.ts index 1acc0eb03..32bea7bd1 100644 --- a/source/conditional-keys.d.ts +++ b/source/conditional-keys.d.ts @@ -22,6 +22,7 @@ type Example = { type StringKeysOnly = ConditionalKeys; //=> 'a' ``` +[Playground Link](https://www.typescriptlang.org/play/?exactOptionalPropertyTypes=true#code/JYWwDg9gTgLgBDAnmApnA3gYQgOwCbAzC4CGANgNIqIDOAvnAGZQQhwDkSqAtIyjTHYBuAFAiuaAKIAPEuDJoAvBhEBIEgC44AqMBwBzUaoBGWnXv1wAPnBwBXEMZRQjAYwD8ZmLoNG8W9DpRILEJOABlbwsqWgB5HDJEOGVsfEJiHHIYmgAeGTkwBQAabSiDAD5RAHoqxXKOEnYgA) Note: To extract optional keys, make sure your `Condition` is a union of `undefined` (for example, `string | undefined`) as demonstrated below. @@ -35,6 +36,7 @@ type StringKeysAndUndefined = ConditionalKeys<{a?: string}, string | undefined>; type NoMatchingKeys = ConditionalKeys<{a?: string}, string>; //=> never ``` +[Playground Link](https://www.typescriptlang.org/play/?exactOptionalPropertyTypes=true#code/JYWwDg9gTgLgBDAnmApnA3gYQgOwCbAzC4CGANgNIqIDOAvnAGZQQhwDkSqAtIyjTHYBuAFAiuaAMowowHAHMqtAIL4AqvhSM5KPHAC8cbPkLEc5JTQA86EgH4AXHAGyFdADTOZc+XAA+cACumto4ugB8ogD0UfrhHCTsYhJwAHIQALIkMADGABY+lgZGuAREpJTU1raOXq7yHnU+kSIxcXBhAG4oUEA) You can also extract array indices whose value match the specified condition, as shown below: ``` @@ -46,6 +48,7 @@ type StringValueIndices = ConditionalKeys<[string, number, string], string>; type NumberValueIndices = ConditionalKeys<[string, number?, string?], number | undefined>; //=> '1' ``` +[Playground Link](https://www.typescriptlang.org/play/?exactOptionalPropertyTypes=true#code/JYWwDg9gTgLgBDAnmApnA3gYQgOwCbAzC4CGANgNIqIDOAvnAGZQQhwDkSqAtIyjTHYBuAFAiuaAMowowHAHMAauQCuKAJL5gAY35wAvHGxaipStRoAeANoDZCgDRwcKkACMUUJ3bnyAut4yvgB8ogD0YfrBHAAM7HAAPhwATOxiEnAAcq4eUMpkapoEujQGRrgEpjjkVLQ2Po7OOZ4A-IH28i0BTe6eiXAq+CiMcih4oSIRURwAjOxAA) @category Object */ diff --git a/source/conditional-pick-deep.d.ts b/source/conditional-pick-deep.d.ts index b8f029a42..14f593d2f 100644 --- a/source/conditional-pick-deep.d.ts +++ b/source/conditional-pick-deep.d.ts @@ -92,6 +92,7 @@ type StringOrBooleanPick = ConditionalPickDeep; type StringOrBooleanPickOnly = ConditionalPickDeep; //=> {b: string | boolean; c: {e: {h: string | boolean}}} ``` +[Playground Link](https://www.typescriptlang.org/play/?exactOptionalPropertyTypes=true#code/JYWwDg9gTgLgBDAnmApnA3gYQgOwCbAzC4CGANgArADGA1gCIopgC+cAZlBCHAORKoAtOxQBnGLwDcAKGnAcMFFHYlqaAKIAPEuDJp00gJAkAXHHFR5AcxmGARmYvW4AHzh2IEPSRy3qZg0NDPEcYSxwbI0MUAKjDdgB+UPDIoMMrJPdPb184gAtk5zcPLxQfWyDgMxKc13dgK3kYCpYKgCtq7LLcw1bpFlkBNABlMOsqOjgAXjhsfEJiHHIJhiYwAB4tHTA9ABpzMYiAPhkAelOpo4xTA5TJOH8MENvrFgHpIbhRlJWAeTAiKQyNNZrgCIClpQaKtmJttLoUPsnBE6gBXfAodjyFB4E7Sc6Xa6FCL3R7oZ7ImxwGIYRLEqxvd6fb7jaH-CHkX44MiIEFzcGLZbQxiwrYIpGHKxojFYnA4-boahgha4My8FAAR1R5EIiF4LDxBKuioCNPQdJeEUZg2QaAAQl0fCs+cqOVC6CKNmKdoisqUfNK8JjsbizhdjWSzRlOv6cK04B0-Tk3jbUHAAHKokB2JTOmb8lWQlaeuHbPZwHBZnNQQ3hjBM21fSW-KAO2N50HzN3Ftal8WWqXFR04WuEgznODGelhycOAd1GrdGeGMn406T4LTtcbs3btIFedD2N73rLwyJxflPd9CcNtMsiItts5P7c3n512C90wr3wn0SlIF2HBUlS7RY1U1bUyF1fVR2NOdKSA2NSVNAID0Qo9kzeIA) @category Object */ diff --git a/source/conditional-pick.d.ts b/source/conditional-pick.d.ts index 8cd5b890e..eb5ba81fd 100644 --- a/source/conditional-pick.d.ts +++ b/source/conditional-pick.d.ts @@ -18,6 +18,7 @@ class Awesome { type PickPrimitivesFromAwesome = ConditionalPick; //=> {name: string; successes: number; failures: bigint} ``` +[Playground Link](https://www.typescriptlang.org/play/?exactOptionalPropertyTypes=true#code/JYWwDg9gTgLgBDAnmApnA3gBSqYNgBuKANHAMIQB2AJnsFQIYA2mwAxgNYC+cAZlBBBwA5ElQBaXigDOMYQG4AUIrZMG06XACCAdxmC06RQEg2VWVACubGNAAUYSwCMm7OJQYgUALjgXglADmpI4ubtLWbDLSMr6UliBOKFAhzq5sfAzATJZQsXBOwIEBMACUGFzKxlaUduXolZWKYmisnNi4+ETSAGICILr6XnAAvORUtPiMLOwcADyD0gakHSB0RAB8SgD02yMbGB5evv5B8n6R0fnxicnnvFk5edK+hcWUMFxAA) @example ``` @@ -33,6 +34,7 @@ interface Example { type StringKeysOnly = ConditionalPick; //=> {a: string} ``` +[Playground Link](https://www.typescriptlang.org/play/?exactOptionalPropertyTypes=true#code/JYWwDg9gTgLgBDAnmApnA3gYQgOwCbAzC4CGANgArADGA1gL5wBmUEIcA5EqgLRMoBnGBwDcAKDHAcMFFCYlqaAKIAPEuDJp0YgJAkAXHCFQpAc3E6ARoeNm4AHzg4AriEuyL1QwAoAlHABeAD44ADcIYDwLPEN0enF6CW40AGUYExxTAGkURAEAeRwyREC4bHxCYhxyKjoAHlV1ME0AGiN0syDxAHpu4IwDdozTeiA) @category Object */ diff --git a/source/conditional-simplify-deep.d.ts b/source/conditional-simplify-deep.d.ts index dc85324ee..bdef915a1 100644 --- a/source/conditional-simplify-deep.d.ts +++ b/source/conditional-simplify-deep.d.ts @@ -20,6 +20,7 @@ type TypeB = { type SimplifyDeepTypeAB = ConditionalSimplifyDeep; //=> {foo: {a: string; b: string}} ``` +[Playground Link](https://www.typescriptlang.org/play/?exactOptionalPropertyTypes=true#code/JYWwDg9gTgLgBDAnmApnA3gYQgOwCbAzC4CGANgMqhhnABmiAIiimAL5x1QQhwDkSVAFo6KAM4w+AbgBQMwWgAqyFAEE4AXgwyAkHQgQAXNp06SxiVGA4A5rJ1tZjuQrjLUAIU0n9RkzoAjCxgrW3tnZ3kVOCpwWgZmVnc1Ly1sfEJiHHJYmnomFjAAHmT1ADI3FQ8AGjgcFAA3FChaiACAKxQAYxgAPlkAegGNXoxfY3RzOEtrOzgg6ZDZtjYgA) @example ``` @@ -60,6 +61,7 @@ type SimplifyDeepTypeAB = ConditionalSimplifyDeep; //=> {a: string; b: string} ``` +[Playground Link](https://www.typescriptlang.org/play/?exactOptionalPropertyTypes=true#code/JYWwDg9gTgLgBDAnmApnA3gYQgOwCbAzC4CGANgMqhhnABmiAvnHVBCHAORKoC0dKAM4xOAbgBQ4nmgAqyFAEE4AXgziAkCQBccYVGA4A5hMYSp8uHNQAhFWvUAjHXoPHxpydMvyFt1VcU4ADJvGwkAenDlAD5QwJCA608LKnBaBgDfO2x8QmIcclSaekQAHkzrABo4HBQANxQoaogHACsUAGMYaIio2PRtXRh9I1E4JyGRw0YgA) @example ``` @@ -37,6 +38,7 @@ type B = Simplify & Map>; type C = Simplify<{a: number} & {b: string}>; //=> {a: number; b: string} ``` +[Playground Link](https://www.typescriptlang.org/play/?exactOptionalPropertyTypes=true#code/JYWwDg9gTgLgBDAnmApnA3gYQgOwCbAzC4CGANgMqhhnABmiAvnHVBCHAORKoC0dKAM4xOAbgBQ4nmirhaDADwAVAHxwAvHGz5CxHOVk16iZQBo4FFDAUBXHAGscEAO441AHzgBZEmFsOnV3M7Rxc3OE8QwJwAbQBdcwgAIwArFABjGBUJKWQ0AEENC2p5E0trHBsQJJQoNQAyCysFYShgHABzFWzxAHpe9TVyhUrq2oam61b2rslpOAAhIsNShR8-UZqoc03xuEb1lpg2zvNpzu6JfsHvXxGqrZ2HvYO7846z45mVObytZZKxgU6BIAC44LsoMxGugkuD3owetc1CDwZDRHA4XAEUA) @see {@link ConditionalSimplifyDeep} @category Object diff --git a/source/delimiter-case.d.ts b/source/delimiter-case.d.ts index 20a282b13..4f917dff5 100644 --- a/source/delimiter-case.d.ts +++ b/source/delimiter-case.d.ts @@ -57,6 +57,7 @@ const rawCliOptions: OddlyCasedProperties = { foo: 123 }; ``` +[Playground Link](https://www.typescriptlang.org/play/?exactOptionalPropertyTypes=true#code/JYWwDg9gTgLgBDAnmApnA3gERQG1MGFKAYQEMBnFAXzgDMoIQ4ByJVAWlpXJmYG4AUAID0wuAGVQYHCiEBjCADseccoxQA1UlGCkARjIBccbHhAEiZSgB5mtCBABC25gBoWAYmYA+OAF4WewgPPRdBBWV4NRBNbV0DFAA5CHFpAgB5RUSAVxA9InJjU3xCEgoUWzAAJjBElBgAd2gAazdPNvRyNJhMnLyC41pSHEoqXwDmarAPRXqmqFbBETEAQQATADdSRTkUNaE2NHS1tZxEKz2ABQZUWGBuawAVcYwBAEgAbQBpOGBFOGaKEQEFocEecAoJlwJUs5WsX3czC83gAusZHt8UQIqEs-qUhrsJOp0mAYMAlORXm81lBEAAlbKKYx6BwybaCN5-OQ4bJrFAAMWARlUMB0igA5hygsZFLl8lBBFR5BT4FBSA1iHgSWSKcZjqdzuU1tcILcyQ9xMTSeTlC90O9mDTEB4oIzmMZRdkUK4HVyeXyPLQhSh3SxQlAAHQAK3Ibne0rgAEYqgBmbF8IA) @category Change case @category Template literal diff --git a/source/delimiter-cased-properties-deep.d.ts b/source/delimiter-cased-properties-deep.d.ts index c6702039d..0794d4a90 100644 --- a/source/delimiter-cased-properties-deep.d.ts +++ b/source/delimiter-cased-properties-deep.d.ts @@ -52,6 +52,7 @@ const splitOnNumbers: DelimiterCasedPropertiesDeep<{line1: { line2: [{ line3: st }, }; ``` +[Playground Link](https://www.typescriptlang.org/play/?exactOptionalPropertyTypes=true#code/JYWwDg9gTgLgBDAnmApnA3gERQG1MGFKAYQEMBnFAEwAUoJVZgVzsUwBfOAM3pDgDkSVAFpuLGAIDcAKBnAAdoSjdSAYzQBVSlAwyAkAFcdASSoAuOAsMgARkVlGdAOVIgUl8jCiKA5rI45RWVVDThtIgB1AgALADEfFAUqcj0nIhMFbghLCKhHYyIE5mTyXJ0AbQBdALk1CAUvOCgWQxwYS2w8EAIiMkpaekYYZlYUdgAePOiYeMTSgBpBEQEAPjgAXjSBQqgRRWyBS3QDHZ19qiO4AEYFg30zohEFNxQrgQAVCBABO-0OP6PPa8EopK4Ve4nfTQoEXK4AJj+MN2z1e7wAUkQoIhfvcAZD7g8UcBLpYAMxIonnF7ud4AZTAwAA1m8kfj9FU7hxZDJ6o14OQwHgYAB5BTOGz2KBlOBdfDKfrUOgMIgjFhsMATdB4BQoa7HOA6lDwywVdCGxQoMmebx+OAcKr2gHLX4YQXCsUSuxEGXeQwoDjrLZQgRGkTXK5Qh5h+HgwlRmFhsnvLw+BS+XHQ-5IzkGfHcoA) @category Change case @category Template literal diff --git a/source/delimiter-cased-properties.d.ts b/source/delimiter-cased-properties.d.ts index b6c7ebb73..a87ab4c44 100644 --- a/source/delimiter-cased-properties.d.ts +++ b/source/delimiter-cased-properties.d.ts @@ -28,6 +28,7 @@ const splitOnNumbers: DelimiterCasedProperties<{line1: string}, '-', {splitOnNum 'line-1': 'string', }; ``` +[Playground Link](https://www.typescriptlang.org/play/?exactOptionalPropertyTypes=true#code/JYWwDg9gTgLgBDAnmApnA3gERQG1MGFKAYQEMBnFAEwAUoJVZgVyBfOAM3pDgHIlUAWg4sYvANwAoScAB2hKB1IBjNAFVKUDJICQAV00BJKgC44svSABGRKfs0A5UiBRnyMKHIDmU1tOUQsu5wUCx6ODBm2HggBERklLT0jDDM5AA8GkQANHyCvAB8cAC82jq8BkSCwFS8ZgCM2boVmoKyzih1fAAqECC8TaxSkgFB8ORgeDAA8rIOljZQ5FG4+AoJ1HQMRKks6eh4sij1bh7erLm8+bnoE1Oz89ZEywhQeiisRaXozYcogvUurx3J5ZF4BpIhkA) @category Change case @category Template literal diff --git a/source/distributed-omit.d.ts b/source/distributed-omit.d.ts index 3e5225d43..5e3605ef4 100644 --- a/source/distributed-omit.d.ts +++ b/source/distributed-omit.d.ts @@ -37,6 +37,7 @@ if (omittedUnion.discriminant === 'A') { //=> Error: `a` is not a property of `{discriminant: 'A' | 'B'}` } ``` +[Playground Link](https://www.typescriptlang.org/play/?exactOptionalPropertyTypes=true#code/C4TwDgpgBAglC8UDeAoAkAEwJYGcDGATlgLZYB2AhmcAFxQDkM9A3OgGYD2HdOwRZAc1ZoKdMgFdiAIwgFWAX1YpQkKACEEydNnxFSlanXpqW7Ljz7kh6KRf7XFKZeGgBVMlg5lNcAD7qlFWgAeVJgYAgMd09vRFCsYAAeaK8AGgZODnoAPlYAejz4bOQdQhJyKloGJih-Y3p5JwwIPAAbCgJoPC9eKA4wiKiPLzp48MiUsiUsNigACn6EwcmAOlK9CuoEeERGegBKLTQCqAB1aAB3DnFWjChWrABraGAOKEoCAg4LqAADRfGQxiv3oOCgQXQJ1efxgvygAAtZBB0lJxMAoBculR6OiZHgKOIcNBfmNfpC8lAMBwIDgyDjKbhLKiIn0AG6yKDiYZkHArJzHCkAAWAOAAtBAAB6QPDAcWfDgEdAA5bclYUYQFIpQACi8oIdF+FDhuHeHHRFCgYC+kAIoD6s1+SHW5QMVT2tQYJnkZPkQA) While `Except` solves this problem, it restricts the keys you can omit to the ones that are present in **ALL** union members, where `DistributedOmit` allows you to omit keys that are present in **ANY** union member. @@ -85,6 +86,7 @@ if (omittedUnion.discriminant === 'A') { //=> Error: `bar` is not a property of `{discriminant: 'A'; a: string}` } ``` +[Playground Link](https://www.typescriptlang.org/play/?exactOptionalPropertyTypes=true#code/JYWwDg9gTgLgBDAnmApnA3gEWAZxlYAIwFcYUATAeRGBgF84AzKCEOAciVQFpGU92AbgBQwrmgCCcALwZhASHK4AxgRoA7AIbqYALg4ShCxhAj68BdQHMR8zfvXEQhFFBF0RY5GgBCMuYoqasBaOvrsPkbyJmZwFiE2CoSaUOb4CbaEaZaJHqLicADC-ugKSjiqoCHaehyFUcmpcenWtsr6hKYANija7p4A9ANwAHIQMMDKaDAAFprwAAYxC3AoAB64MDhwIXALEiva5Hs+CwA0cCTw6uM76nuF53BHwkN7jSvrm9u7C6fP6mOC0eFyucBu8F+BwAdPlvHAAKrqYAQe6yKQAHzgfixhU8BWotDI5CRKLRcGw8SuFEJMAAPKTURd2DF2HAsexGuwAHyecgoZRdFJoZSovBwVhEiiM9T6WnEmWeYCMOAACklMAVyNR0PKlQ0NRk0lk7EMAEoAhqtWToZoRHB5ENpNy4JQANKiR3DAACW2461Qyhg-qgLCgCit0u16mhMVsTpdAFFQ9B9EtTCtcODbpo4GAWKhYIgJSqFug9cFQrVTUJntkEnQFp63r6cP61oHg64wxGaJqozbGvavc64Mmw2mPjtthDnnmC64kCW9uWglUq+FDII680co3hHQgA) @category Object */ diff --git a/source/distributed-pick.d.ts b/source/distributed-pick.d.ts index 406f2f7db..eb82cce06 100644 --- a/source/distributed-pick.d.ts +++ b/source/distributed-pick.d.ts @@ -39,6 +39,7 @@ if (pickedUnion.discriminant === 'A') { //=> Error: Property 'bar' does not exist on type '{bar: string} | {baz: string}'. } ``` +[Playground Link](https://www.typescriptlang.org/play/?exactOptionalPropertyTypes=true#code/C4TwDgpgBAglC8UDeAoAkAEwJYGcDGATlgLZYB2AhmcAFxQDkM9A3OgGYD2HdqaaARhQJ0cwImQDmrNAF9WclClCQoAIQTJ02fEVKVqdeqpbsuPdAIoAvEWPJT0ChUvDQAqmSwcyGuAB81VhcVAAUsPABrCAwPLx9EMMiAHljvABoGbUIScipgeigA+k4OegA+VgB6Svgy5CzdXIMGJkKGYwySnkFhKFFxCRk2pEEbPrtJGRlFDAg8ABshaDxvUSgwcKiYz286RK3UsiCsNigACg3I6MOAOgac-WAEeERGegBKTTRqqAB1aAA7hwAK7zDBQeZYKJQYAcKCUAgEDgAqAAA0uBx2ZFR9BwMNc6B+sLRMFRUAAFhACBAMvxgU8AcsqPQnvw5hRgThoKj9qjCZUoBgOBAcGQWYLcHY6cBoBwAG5UqDArE4G6Kb4CgACwBwAFoIAAPSB4YD6xEcAjoDHXLE3Eo3HrSaq1KAAUXNvRCSMgBFADB6BSFIvhHCehslUG8+JU9BGQlsAyGATjY369hk9DVMiAA) @example ``` @@ -81,6 +82,7 @@ if (pickedUnion.discriminant === 'A') { //=> Error: `bar` is not a property of `{discriminant: 'A'; a: string}`. } ``` +[Playground Link](https://www.typescriptlang.org/play/?exactOptionalPropertyTypes=true#code/JYWwDg9gTgLgBDAnmApnA3gEWAZxlYAIwFcYUATABWAGMBrAXzgDMoIQ4ByJVAWmZR5OAbgBQonmgCCcALwZRASHK4aBEMAB2AQ00wAXFykilzCBEPoliwtqiG8BTQHMxihm5QAPfLpQRiHENCcwAbFF0xD3FJOAAhOQVlVXUtXQMuOJNFMwskm20ALwd8LVclaMVvX01-QOCwiM0osVEAeja4ADkIGFo0GAALbXgAA1yAOlsoUbhvXBgcOC04UalZknhNXuXNVbjRiZjkNABVTWAIPfkZAB941tjqegpzy+u4bEciUgpnugAPG8rgAaLgqHBqUBpPScOD3Ti5TgAPla5BQNFCdjQNCueDgYFodFeFyuhn+JPerWAzDgAApCS9yMDNBMIVCNDo9HJZPJOMYAJRJRnE5mk1mTaZiOCKDqyZFwADyAGlxLLOgABRa8byoGgwHVQNhQJQiylXCbVKB+AI4NxyhUAUSN0HJbFQsEQqytNsCs3IEEEcG28Hm+KuCBOq3+AKkYM47NSXJgcIRSORhzVHTgWpwOq8eoNKBdJsUZrF7wmkqK9ra8rgzuNhlG01muGDO20BPdxaQcAgtNG6ET0OThn5Ijg2hKTmcDEzDCAA) @category Object */ diff --git a/source/empty-object.d.ts b/source/empty-object.d.ts index c23866416..0cb1b8731 100644 --- a/source/empty-object.d.ts +++ b/source/empty-object.d.ts @@ -24,6 +24,7 @@ const bar3: EmptyObject = 42; // Fail // @ts-expect-error const bar4: EmptyObject = {a: 1}; // Fail ``` +[Playground Link](https://www.typescriptlang.org/play/?exactOptionalPropertyTypes=true#code/JYWwDg9gTgLgBDAnmApnA3gUXEg8gIwCsUBjGAXzgDMoIQ4ByJVAWipQGcYGBuAKD4B6QXAAqACzRUIAGxkQA7sAB2AczjA5AVy5QAhjE4JJcMLXwyU9JTHFwABunL2AdHxIRlXahAgBGAC4MSgBeYJ44YTgABT0ODndPb2kIACYgpzgwgG0AXQio2PjEr3gUgGYM0LgAFlSCkSKEj1KfCBqqrIw9IL9yBpi4hKERAHVgWwdsMDwiUhh7OE8ZRGMpYChvEji0YA44ADc9GWAAEzcW73w9KEC4adniMi6nAaaRuAABGA4WFAAPVBkP5QWhQEpXG7pe44RAEJ7wHL5SIiABiek0H2+vwBQJgILBEPg1yglRhMzhc2eYTqA3RmKi2L+gPmBOgRLgJI65Me8xePTgfTpGJkQA) Unfortunately, `Record`, `Record` and `Record` do not work. See {@link https://github.com/sindresorhus/type-fest/issues/395 #395}. @@ -42,6 +43,7 @@ type Pass = IsEmptyObject<{}>; //=> true type Fail1 = IsEmptyObject<[]>; //=> false type Fail2 = IsEmptyObject; //=> false ``` +[Playground Link](https://www.typescriptlang.org/play/?exactOptionalPropertyTypes=true#code/JYWwDg9gTgLgBDAnmApnA3gSQM4FFxIDyARgFYoDGMAvnAGZQQhwDkSqAtHStjCwNwAoQezQAFAIbZscALxwc+METKUYAHnTUAfPzgB6fbO0IoAVxQjkaAGITgAGwCMchXgKIS5KuoDaAXV0DIxM6CQdsS1E4O0cAJldFDy81dQA7MwcHIMNjenDIoA) @see {@link EmptyObject} @category Object diff --git a/source/entries.d.ts b/source/entries.d.ts index 8211599c2..83a3452fb 100644 --- a/source/entries.d.ts +++ b/source/entries.d.ts @@ -48,6 +48,7 @@ const mapEntries: Entries = [['a', 1]]; const setExample = new Set(['a', 1]); const setEntries: Entries = [['a', 'a'], [1, 1]]; ``` +[Playground Link](https://www.typescriptlang.org/play/?exactOptionalPropertyTypes=true#code/JYWwDg9gTgLgBDAnmApnA3gUQHYysFAZwF84AzKCEOAciVQFoyiYaBuAKA+FxSjICGAYzSYAHgPAAbNOg4BIQlRQBpFIgBccbAFcQAIz6diXIRGyF4IAdmBgdUgTCI48BQnAC8cABQoJ0kRarvhEADzikmAyAHwAlF4xcP5RMoQAdNZgfgHRaJ5JANoKAPQlcAAiEERwSiBoAlD6wHiNiHBglCKEhDwA5nDmCAAWaADW6r4A7i3DCMhoPGTQ1jDAQwIAbgLAjvoycQopgYUADAC66TAQAKpgqFAAwgKEKD5xADRc8mWV1R51BpNFpQNodLpEXrYAZDGCjODbKQ6NA+GZw+aoOBLFZOdbYOBbHZ7A5HXIyQoARku1wAYsAxCgACbvDjnOKcDhmCzwY55YJk-IYQFqTRwCnEThcyzJXChDzeADy+gAVighDB0ihZe4cqkUAkXnAQu4IgKYpLzNKIDoYPZ4N5rLZ7I5nIRjUQ-NqiOyuL8lar1YROZb4BAVWqYJFAl4MAItOKLdzBuH1e7CMEvYQwvQUBAyMmA5GzTHCoUaAIaB8xedzhzfgBBKCgxBBqXwRrNqN5EvlyvVxPSjsCRBpjNucI5vMEpvDruxEtnKu985VylVqm133lACyAjArZDcCyc8F2BQUzgu+ypd765rPrbR73o6NmezCynx+L3hvFbvm44X4AGUUBgA8k1eIs9RjM8LxAmAfDLP9qwfQ9IJfNN31QKd0O-OBfz7ZdVwpf82CAA) @category Object @category Map diff --git a/source/entry.d.ts b/source/entry.d.ts index 3b95b69b7..c146008f0 100644 --- a/source/entry.d.ts +++ b/source/entry.d.ts @@ -51,6 +51,7 @@ const setExample = new Set(['a', 1]); const setEntryString: Entry = ['a', 'a']; const setEntryNumber: Entry = [1, 1]; ``` +[Playground Link](https://www.typescriptlang.org/play/?exactOptionalPropertyTypes=true#code/JYWwDg9gTgLgBDAnmApnA3gUQHYyogXzgDMoIQ4ByJVAWmJQGcZKBuAKHeFxSmIEMAxmkwAPfuAA2adOwCQjcigDSKRAC442AK4gARrw4FOgiNmZwQ-bMDDbJ-GExx5EcALxwAFCnFSUmi74ADxiEmDSAHwAlB6RcADa8gD0yXAAIhBMcIogaPxQesB4BW5gZMKMjNwA5nBmCAAWaADWat4A7sWNCMho3MTQVjDADfwAbvzADnrS0fK+4dIJAAwAugB0MBAAqmCoUADC-IwoXtEANJxyqRlZjDlKcAVFJfhw5RCV1dh1DTDNOCTSTaNBeLoA3qoOADIaOUbYZ6Tab8WYoeZyRb+BIARk22wAYsBRCgACbnK5rDjsUzmeBYiIBOBhfweDC5FRqTQ4ggcWkWFC4d6eADyegAVihBDANoK8MAmD4-Izoqs1s8HkFEKFlVE+WYLBBtDA7PBPFYbHYHE5GFqfELENFqbcxZLpYwaQb4BAJVKYCzGWz0PxubzPXT6r7pVrAg7gjQUBBiJG3f7dSh4p4EpR+JQLnA8c60gBBKBQfiID38+AFcuIAPSNnZ3P5wvhiy1itagDK8t+sdc8b6SeeZa76cziRW+ZzlCp7ZrY-rDoAcroDFAByEEyPO-WJ02ca35+xbgBZfhgKteyyXhtoTzYFAdOAXsBeBLNvMFtZrJ0L28wBjZk4x3ZMrCAg8s1nY8izgbsUBga8I1ONMlgfLRn3gxCPxgn9-2rHJEJ7Psai3bUwKItD-EnL8Z1zedCNQrU130XhyKHVAR2YqDEiPH9WCAA) @category Object @category Map diff --git a/source/exact.d.ts b/source/exact.d.ts index f3d8af1f8..4c16d8cc5 100644 --- a/source/exact.d.ts +++ b/source/exact.d.ts @@ -35,6 +35,7 @@ onlyAcceptName({name: 'name', id: 1}); const invalidInput = {name: 'name', id: 1}; onlyAcceptName(invalidInput); // No errors ``` +[Playground Link](https://www.typescriptlang.org/play/?exactOptionalPropertyTypes=true#code/C4TwDgpgBA8gdgGxAQQMaomYA5AhgW2gF4oBvOAiALigGdgAnASzgHMBfAbgChuATCKgS4G0AGYBXOKmBMA9nCgKkaDFjyEAFCNYTCcYLQD6NeCvSYclAJQ0AbnKZ8e3APSuoAFXAQAyqmYsKFQ5fDBhFlooXAAjOQlgKAgADwxaKLAGOUgGWQgogHcACwhFXEU5GIArQUSEJmAIBlwEKCYMrLsnCD4AOjcPAAFDAFoUyBkxhiyGbmUUC3VKTXJKGgByCkJ1gBo2vhoARnZrHnciAD4oAAMna7aolLTaXncvH39AxL45fKg4OSJEJhCJlOIJJKpfIdbJNPKFEqKYAlKCZORdAR8KB2FoSaDtaLYkRMWIIaCaAGJcpKaq1KD1RrNBDWfohOD0NpwHH1PgASTgYAhJFWhA2Wwgu32Ry4c0QCzUVi0LG5Tn5guApygb2wciS0zkDFoQA) Having `Exact` allows TypeScript to reject excess properties. @@ -50,6 +51,7 @@ const invalidInput = {name: 'name', id: 1}; // @ts-expect-error onlyAcceptNameImproved(invalidInput); // Compilation error ``` +[Playground Link](https://www.typescriptlang.org/play/?exactOptionalPropertyTypes=true#code/JYWwDg9gTgLgBAbwKIA8CGBjGBfOAzKCEOAchgE8wBTAWjyoGcYSBuAKDYurgHkA7ADbkAghgxUwMAHJoQVOAF5EfWVQBccJlGB8A5tnZsAJlQwC0UeXgCufLMAh84joaPGSZcgJLhCANyojAB4AFTgqFBgqPiMGOFRMGCD+VzEJaVUAGjgQgD5cgAoLXWs5PhgGAH0NEIBKDT8IYCNDDEcmOB0-NAFmrz4wa3glBBU5DRIxqhJs5o0ARgM2AHpluAABCpoI6ixtqEIoNhcRNI9VHzB-QIKunr6BodqWOFW4AGEiMGBzGAcnKgHaBAA) [Read more](https://stackoverflow.com/questions/49580725/is-it-possible-to-restrict-typescript-object-to-contain-only-properties-defined) diff --git a/source/except.d.ts b/source/except.d.ts index 4125140c7..c8c5aa24b 100644 --- a/source/except.d.ts +++ b/source/except.d.ts @@ -97,6 +97,7 @@ type PostPayload = Omit; type PostPayloadFixed = Except; //=> { [x: string]: string; name: string; role: 'admin' | 'user'; } ``` +[Playground Link](https://www.typescriptlang.org/play/?exactOptionalPropertyTypes=true#code/JYWwDg9gTgLgBDAnmApnA3gUQB4GMVgwC+cAZlBCHAORKoC0pKAzjNQNwBQndaAYhAhwAvBk4BIAIYAuOADsAriABGKKF3HLZrKMDkBzLkS49k-QQHVgMABYQFMAIIi4OfIQA8AiABoak6gA+LgB6EOFAjC04HT19Im4wuAABGGZ6FGxUXBgMqAooTlwIOVYyS2s7B0dZbytbeycXdBk4AEY-aOoAJmpjTjCIuDUC5llqALgAEwgWeQh4TOAyvQQzGnQ4aNiDdjgiam5eODrKxoAhFzcCGC9BP2plaj90KBQARwVgN5xJHIAFChgMYIKAKFBEYIDcKRFqyRQqNQkABkcH+klgwEkABsPAAlFDFKBTDwAImUpL8chQADc1IFAokQik0hksoTciNoEUSmVSBUGg5zrUBVUYJdRHD2p1xr1+oNIlyoMw4JJ4I9qLIACrrag7fTUODLebwSTMZjAfRySTKbFoGBCY7UBRyKYoUh6FBTagAOiZcC1NjQAAMAPIgazBuAOYDY6yINaoaazZhyWhwADu0AA1pmg3I4JRrDA4jFssAPbg4NmUIgVeRKIXlAArDkq4pyGCSPSlvRu7AxS3WmAKN7MP3QuAAYV5wDdUAQQfK2OxEAzpcyknAdukR3WAFVmGoACJqyTNCQAbRAKC7UzP2hgugMAF1H8-DBIUCBu9j33ENGtG9-12CQKB3fwpgjNM4AAHxoBQjygDhOH6ScwwjGAo1wO0MWxBMZhYNN4FUGxJDpVUVUybIYC9I0C1sY1cDNFBd2Of4IFYdFEFXSQphccNrA8Q8TzPB5v1-IJQhhDA4EvbAQP0N8YifAC5IU+QlFUKBlP1PYEknABJAsLRHNVgF5OA4xrRdlj8YNrkIKMsygbMVVUGBaKgP0kkM+ALW3BM3hACA6RVWwQwk2MoxrBMMxsWM0DAMc1BpUscWxRc0AWIMF1i8dTCTDiuMkHiID4vhgGwOjREc24RKgU8u3En9Yyk6Ehk2eTFN01TdnkLdWJUj89nAoaJigvRDXg50kI4fYgA) @category Object */ diff --git a/source/exclude-rest-element.d.ts b/source/exclude-rest-element.d.ts index e2e70f2a3..27f347e96 100644 --- a/source/exclude-rest-element.d.ts +++ b/source/exclude-rest-element.d.ts @@ -22,6 +22,7 @@ type T3 = ExcludeRestElement<[...'foo'[], true]>; type T4 = ExcludeRestElement<[number, string]>; //=> [number, string] ``` +[Playground Link](https://www.typescriptlang.org/play/?exactOptionalPropertyTypes=true#code/JYWwDg9gTgLgBDAnmApnA3gUQB4GMA2ArgCYoBKKAzjJviiCgHYwC+cAZlBCHAORKoAtOyoxeAbgBQkgWgAqARjgBeODgIlyo2vSYwAPAG1GhEACMUUADRwAdPepRgjAOaGAujcfOXN3uwgIXncAPikAenDlELhjUwtrOG9XPwCg92lZODkAJhU1PCJSCmodBmYje1szQLoAQ0YPLxgnV1CIqJjDZJcMmWR5AGZ89SKtUrpyg0Mq-0DeJoQoQhR2yUjo2JaVvqy5ABYRws0Smkm9IxNzS2bW3rD1ztirhNufdyA) @see {@link ExtractRestElement} @see {@link SplitOnRestElement} diff --git a/source/exclude-strict.d.ts b/source/exclude-strict.d.ts index dc23322d9..925c72825 100644 --- a/source/exclude-strict.d.ts +++ b/source/exclude-strict.d.ts @@ -17,6 +17,7 @@ type Example2 = ExcludeStrict<'xs' | 's' | 'm' | 'l' | 'xl', 'xs' | 's'>; type Example3 = ExcludeStrict<{x: number; y: number} | [number, number], unknown[]>; //=> {x: number; y: number} ``` +[Playground Link](https://www.typescriptlang.org/play/?exactOptionalPropertyTypes=true#code/PTAEDUEMBsEsBNQFEAekC2AHaBTAzgFCxYD2ATgC6gUCemOoA3qgMbQCu8OAyhWbCwoBfUADMyJdKADktegFpR+CtIDcBAnIaoM2HAEZQAXmQo2nHnwEUAPIzwVIFdngBcMvOxYt8eNaHgnSHcHfgA7AHMAbQBdEQAfJgcnF3dpHDIJMn8MrJCrSKEAGiTHZzcPLx88PyEAPnUQIzrSlIr0zPIczrJ88IihDS1TXVwAJmNTcy5efkEbaRQ-UETpZdX0aRWZaC3VlF2SxfWPaQaCJpbpTe3pXduD6SG6bTQsXABmSdYOGat5xgodxhdjoABGGVUoBowNBELICVAURB4IyJRR8JiJXYYQA1mESAB3MKxc6XJhA0AYyHQ2GohFAA) @example ``` @@ -35,6 +36,7 @@ type Example2 = ExcludeStrict<{x: number; y: number} | {x: string; y: string}, u // ~~~~~~~~~ // Error: Type 'unknown[]' does not satisfy the constraint 'never'. ``` +[Playground Link](https://www.typescriptlang.org/play/?exactOptionalPropertyTypes=true#code/PTAEEkDsDcEMBsCWATUBRAHrAtgB3gKYDOAUIngPYBOALqDQJ64GgDemAxvAK7IEDKNKog40AvqABmVCtlAByRswC0k4jXkBuEiRCgABvIwZ48-aA6xIkCnQIYuvFlYY0AFokgBzKTLmGMInlQAB8FINCFbGCw+VNIo1N9XTAAARoiZXtmUSyqGSoSJRZMHHwCAEZQAF50Bx4+QWFRAB4jCNiOqJiFeNiTeQAaBQGE41MAPm09UFm5+YXFpeWV1bmAP02t7c2U9HzqAC5QABUmFgAiRJ6jAYvQZApiUBs6IlgaRCJJBno3Fg4FEgRCEsE8dHkkAI0AIVHkADodHp9NxIABrGwAd0gAG0ALrmSzWWygeyOPigFzuTw+aSyAysDDHSDcbAAI1hmlADGZrI5VAkYUZxxBwm8XJ5oFFNLEyT06Uy2QIuVhBSK5zqZUIACYanVyQIhCIaC1hS8+Zzubz2bDBWwmVKjeKrY6xV4xMNURiKNj8VM9mtA0HgyG1jttns0AcqMczswFF6sbi8cFHs9XlKPl8fn8AUDRWDIBCoTC4fCgA) @category Improved Built-in */ diff --git a/source/exclusify-union.d.ts b/source/exclusify-union.d.ts index 6d90c4972..052d419f2 100644 --- a/source/exclusify-union.d.ts +++ b/source/exclusify-union.d.ts @@ -42,6 +42,7 @@ loadConfig2({filePath: './config.json'}); // Ok loadConfig2({content: '{ "name": "app" }'}); // Ok ``` +[Playground Link](https://www.typescriptlang.org/play/?exactOptionalPropertyTypes=true#code/JYWwDg9gTgLgBDAnmApnA3gUQB4GMA2ArgM7ABmiAqgHbATUC+cZUEIcA5EqgLRkrEYHANwAoUdzQAxYPhQBhemWABzOAF4MogJDK5ABQCGMABYAuOIKjBqKsQzETkaAJLV8NhUtUat23PQwKNQwFlY2dqIO4gAmKASGUGhkhNS4MHTUcPgQhjGK1MoqAIwAFBBgGfTEFjJyBUVwAD5wbh7UXoWqAJQWAG4QwDGOAPQjcADKbCj0aAGE+DFwIMCChgDWwfiIcGCsfUNoAEYQpnAABnooRqbncIbUS+cBIcEw5wB0ojl5Dapl6CuN3MnA+IxeRQ+ACtiPQOAAaOAvIIhCwcdBwABE1EMIBQmIsmMMYDAmLgDA4DG6wjgYzgADkIHAUFBWFBiOI6ZRiGhzjgCCRyFRaPQ7jAmXsUH03ggTMZlqsYBsUF9JHA-mpNPyiKQKDRMgAeOqdRotNqeDUAPjEY3UlowQOMIPCthpyLeAH4LB1pVAmC10O7UZYYNZXcxZNcnV64D6WQxYvF8Ilkql0plsrl8t4VAAmcqVTI1dU53pwAZDUbjAACMGIPBQ2FQ6QbrOg3yzGvzgMjwLRYIhqmhsOoCKRgTeaIx2Nx+MJxNJ5Mp1NEtvtmDbUAsAEEoCpCHiQnAIGQEM5OBjHaYwqGIm6J8GXXYl3BVrHTvdiKQVDijnIEBKiSzkEUDHqearohGBhOjeYbPkGMAxnGUA0v6GDjq8j63uGV4mEhUosqhHBfB2vw5t2uH9uCObDnCVI0nSADy6ziD82ZdHmpSBg+oQXliOJ4gSWILmSFL0bS4zMUAA) @example ``` @@ -70,6 +71,7 @@ function processPayment2(payment: Payment) { //=> string } ``` +[Playground Link](https://www.typescriptlang.org/play/?exactOptionalPropertyTypes=true#code/JYWwDg9gTgLgBDAnmApnA3gUQB4GMA2ArgM7ABmiAqgHbATUC+cZUEIcA5EqgLRkrEYHANwAoUdzQBhAIZQAJgAUZiECmrwAvBlEBIGSAiENALjjVCIAEYooY3bjnyAcpZtQzgqMGoBzMQxiEshoysgy+GFqGnDa6HoGRqbmbrb2YCoZ+ACS8p4w3n4BQWTGuDB01HBgrLgCxFHqMACMABQZqk1msgqNMQA+cGFZfTAAlDq6APRTcAACMMQ8KNio5ctQrFB6uPSCcPIoMDLA+MSx1SrRMAB0jgqu1rZwAPwvl50aNx1ZucJwMzgsmo1Ag8BkuDqxHOAAN7i5UlAYXBoHAYT8IrlkfJgFAUOV8IhRAxxJIhlcmhccAQSOQqLR6AAeHpKCkDcnhSJsmAAPjEM00PIwiWMMDMFiedjg8Me7nyhX8H1+8he4pQADdbExBugRckJe5-hicnk4F4fIqZYjVeYNVrxKVqOVKtVavVRgAmdrcsyjCbxBx7eCHY6nc7aDrXO5OWXPN4fKPGv4A2YAeQA1noBULzX5iUA) @example ``` @@ -87,6 +89,7 @@ type C = ExclusifyUnion<{a: string; b: number} | {b: string; c: number}>; type D = ExclusifyUnion<{a?: 1; readonly b: 2} | {d: 4}>; //=> {a?: 1; readonly b: 2; d?: never} | {a?: never; b?: never; d: 4} ``` +[Playground Link](https://www.typescriptlang.org/play/?exactOptionalPropertyTypes=true#code/JYWwDg9gTgLgBDAnmApnA3gUQB4GMA2ArgM7ABmiAqgHbATUC+cZUEIcA5EqgLRkrEYHANwAoUdzQBBOAF44OAiXJVa9ADzoAhgC44gqMGoBzJgB8MAIz3VCISyigMAfGID0b2c4y79MQybCcJYA-DYoAG6O5j5hcNSRjkHW8XYOTuKScABCcgp4RKQUNHTUmr4GRqZwFugptvbRNRi4epYQEPgoWoyuoh5ePnqVgcFxCVFQQbjjiU7N2rOTyTZpSXAz4ZMxi1vroXtTG20dXT0MmchoAMJ5ioUqJRraw-5VK6mN87UpI8bTqy+Lncnm8Lz8AX+wUB6WmSyatS08KOvzeo1an3SFwkVzgABE7gVlMU1GVdnAAIxBKDdAAm9HwiGhcAATDtaXoACzA-qg2J6KlwGlaenURnMllBWnInZIw7JZFSrkMIA) @category Object @category Union diff --git a/source/extends-strict.d.ts b/source/extends-strict.d.ts index 3fbcce13c..eac227785 100644 --- a/source/extends-strict.d.ts +++ b/source/extends-strict.d.ts @@ -29,6 +29,7 @@ type T4 = ExtendsStrict; type T5 = ExtendsStrict; //=> true ``` +[Playground Link](https://www.typescriptlang.org/play/?exactOptionalPropertyTypes=true#code/JYWwDg9gTgLgBDAnmApnA3gUQB4xQOwBMBnAZRimAGMYBfOAMyghDgHIlUBaBlYmNgG4AUMM5oAKgEY4AXjg48RMhWowAPPgCuIAEYoocAD5x+lfAHMANKdWWAfCID0T2fcYBDADbEUo8XASAExyCrgEJOSUNJooAG4GNtp6Bo7CLm6ePn5iyJIAzKGKESrRGvjxiXAVCVBpGe4UWjkBEgAsReHKUWrqZsCWSTr6hib9Ds6ujVDN-nmBAKydSpGqMePWtuYW9VMIMyhAA) @category Improved Built-in */ diff --git a/source/extract-rest-element.d.ts b/source/extract-rest-element.d.ts index 31a6eff51..6a8c60695 100644 --- a/source/extract-rest-element.d.ts +++ b/source/extract-rest-element.d.ts @@ -20,6 +20,7 @@ type T3 = ExtractRestElement<[...'foo'[], true]>; type T4 = ExtractRestElement<[number, string]>; //=> never ``` +[Playground Link](https://www.typescriptlang.org/play/?exactOptionalPropertyTypes=true#code/JYWwDg9gTgLgBDAnmApnA3gUQB4ygQwGMYAlFAZxkwBsUQUA7GAXzgDMoIQ4ByJVALRsKMHgG4AUBP5oAKgEY4AXjg48RUiJp1GMADwBtBgFcQAIxRQANHAB09ylGAMA5gYC6Nx85c2ebCAgedwA+SQB6cKUQuG9XKRk4WQAmZVVcAmIySm16JkN7WzNA2nwGDy88H1CIqJjiiFKGBOQ5AGY0tUzNHNo8-QNC-0CeCoQoYxQaiUjo3gCgltQkgBZOjI1sqj7dQxNzS0qnV2nZmIYUADdLIA) @see {@link ExcludeRestElement} @see {@link SplitOnRestElement} diff --git a/source/extract-strict.d.ts b/source/extract-strict.d.ts index 2f17d13e4..25c671e93 100644 --- a/source/extract-strict.d.ts +++ b/source/extract-strict.d.ts @@ -17,6 +17,7 @@ type Example2 = ExtractStrict<'xs' | 's' | 'm' | 'l' | 'xl', 'xs' | 's'>; type Example3 = ExtractStrict<{x: number; y: number} | [number, number], unknown[]>; //=> [number, number] ``` +[Playground Link](https://www.typescriptlang.org/play/?exactOptionalPropertyTypes=true#code/PTAEDUEMBsEsBNQFEAekC2AHaBTAzgFCxYD2ATgC6gUCemOoA3qhWZAMYUDKrsnAvqABmZEulAAiWvQC0Q-BQkBuAgWkNUGbDgCMoALzIUrDt16cAPIzwVIFAK54AXKADkee+3b48rpaHg7SBcbMlgAOwBzAG0AXUEAHyYbO0cXVxwyUTI-UEzskN4o-gAaZNsHZzcPLx9XfgA+FRB9BvLUqvdPbzxff0DbQrCouP5VdSMtXAAmAyMTTh4wy1cUX1Ak91cNt3Rtzeh9txRDstX1zd8mgha286Ot8boNNCxcAGY5ljZF8worFAucL2dAAI0y-hoQJB4LIiVA0WBYMyZSRsNiZXs4QA1uESAB3cJxa63BFolGgclkWJAA) @example ``` @@ -35,6 +36,7 @@ type Example2 = ExtractStrict<{x: number; y: number} | {x: string; y: string}, u // ~~~~~~~~~ // Error: Type 'unknown[]' does not satisfy the constraint 'never'. ``` +[Playground Link](https://www.typescriptlang.org/play/?exactOptionalPropertyTypes=true#code/PTAEEkDsDcEMBsCWATUBRAHrAtgB3gKYDOAUIngPYBOALqDQJ64GgDemNVsAxjQMqdEvAL6gAZlQrZQAIkbMAtGOI0ZAbhIkQoAAYByDBnh6dobrEiQKdAhk486FhjQAWiSAHNxk6foxE9UAAfUD0A4NDsQJC9YwiDYx0tMAABGiIFW2ZeTKpJKhJ5FkwcfAIARlAAXnQ7Ll4BKiEaAB4DcJiOyOjQuJijPQAaUIH4w2MAPg1tUFm5+YXFpeWV1bmAP02t7c3k9DzqAC5QABUmFhkEnoMBmVBkCmJQKzoiWBpEIjEGehcWbgokCI9ncdD0kAI0AIVD0ADpNNodABXSAAaysAHdIABtAC6pnMlmsoFs9l4oCcrncXgkUl0rAwx0gSOwACNoWpQAwmSz2VRRCEGcdgU1PJzuaARdThEltGkMlkCDloflCudaqVCAAmaq1Mn8QS8FpC568jlcnls6ECtiMyWCMUW+2ijzCYYo9EULF4qZ7Nb+gOBoNrHbbPZoA5UY5nZihD2YnG4wIPJ4vSXvT7fX7-QEi2Cg0IQqEw2FAA) @category Improved Built-in */ diff --git a/source/find-global-type.d.ts b/source/find-global-type.d.ts index 675b67ce4..49c7a35f6 100644 --- a/source/find-global-type.d.ts +++ b/source/find-global-type.d.ts @@ -16,6 +16,7 @@ type FooType = FindGlobalType<'foo'> //=> never (let/const don't work) type BarType = FindGlobalType<'bar'> //=> string type OtherType = FindGlobalType<'other'> //=> never (no global named 'other') ``` +[Playground Link](https://www.typescriptlang.org/play/?exactOptionalPropertyTypes=true#code/JYWwDg9gTgLgBDAnmApnA3gMWAOwCYDiANhAEYCGRAKsigL5wBmUEIcA5EqgLSMoDOMdgG4AUKLwoAxkXJQ0AcxIUiGUQEgpEHIKYQIALjg4AriFIoowuAHobcIinjl8cLTvh5tnOAHdoANYaAG5ycBRQRoJQuArWcLb2oVB+gfyidOJcaJj6NKhwALxw2PjEZJT5KAA87Iz67AB8CS12hc04KMGWcAAUjjA27rpeOD7+UAEAlKLZcABCclVFJbiEypW0tRFNLQltzdGxs7RwAPIwABaWy8Wl6xXUW+wQV5a7B8ZdPb04EHBKR7GcggFB4Diva5QdhTIA) @category Utilities */ @@ -38,6 +39,7 @@ class Point { type PointLike = Point | FindGlobalInstanceType<'DOMPoint'>; ``` +[Playground Link](https://www.typescriptlang.org/play/?exactOptionalPropertyTypes=true#code/JYWwDg9gTgLgBDAnmApnA3gMWAOwCYDiANhAEYCGRAkjgM4zk4DGKAKsigL5wBmUEIOAHIkqALQ8U9IQG4AUHKZFytWnAAKEXPHRyAkEwh0YUAK5MY0ABRhTpIsCZwAHgC44OUyFIooAGjhbe0c4RHdPb18ASgxOOTi5UTRNbQAZYABrNABeDS0ceAAfOGx8YjJKGnpGFnZUAB4hABEAeQBZFIKhAD4ZIA) @example ``` @@ -55,6 +57,7 @@ declare global { type FindFoo = FindGlobalInstanceType<'Foo'>; // Doesn't work type FindBar = FindGlobalInstanceType<'Bar'>; // Works ``` +[Playground Link](https://www.typescriptlang.org/play/?exactOptionalPropertyTypes=true#code/JYWwDg9gTgLgBDAnmApnA3gMWAOwCYDiANhAEYCGRAkjgM4zk4DGKAKsigL5wBmUEIOAHIkqALQ8U9IQG4AUHLwomRclDQBzEhSIY5ASAD0huAGFVtWnFqIcDAB5wA7hBwi45PHgQALNAGsURAQIOAADLTJKVh9gWjCDFXJLOEwIUPROBSMTXBgUKB5yFjgAajgmV3ooAFcmGGhrJCI0Fyh-WgM8gqKSgCE1DCz9ADdBgagALjgcFCc4AAoASjgAXgA+OAmZOGM4ADkIeBb4Rsq6GDksuVE0bHw00NXU3EJtShp6RhZ2VAAeISPITrHZ7AAiECkbngbX8Nw4L3wEzWiLeUWoF2+bA4AImwNBJgA6tAOkA) @category Utilities */ diff --git a/source/fixed-length-array.d.ts b/source/fixed-length-array.d.ts index eb5f5e86c..24105fecd 100644 --- a/source/fixed-length-array.d.ts +++ b/source/fixed-length-array.d.ts @@ -23,6 +23,7 @@ color.pop(); // Allowed console.log(toHex(color)); // Compiles fine, but fails at runtime since index `2` no longer contains a `number`. ``` +[Playground Link](https://www.typescriptlang.org/play/?exactOptionalPropertyTypes=true#code/MYewdgzgLgBKA2IBOAuGBtMBXAtgIwFMkAaGbfI08wpAXRgF4MAmAVldIEZmAOUgNgAstANwAoMQDMsYYFACW4GFBAAJAgA8AFOhIwA5qTy00SAgEMAJuHgBPDNUplcNKi6K0AlDADeYgJBmUFhIYDAABgDEACQ+SAB0KgDKUEjyYPpanPyeAL6x+okgKWkZWTn5PnhFJemZ2Xnh4rkSCMjxAA4gHVqeIjAA9AMwAILwiADuBJat4BAg8ATxiJkq6tptSJ59g8MAwiA4HfKLEDCS6QRGWLCS5idn5rBIMgo4BDAQ6cAf6ZaaEWY4TIIBgiAyRDg4Cg90gMHMEUcSHC8SAA) `ArrayLengthMutationKeys` solves this problem by excluding methods like `push`, `pop` etc from the resulting type. @@ -36,6 +37,7 @@ const color: FixedLengthArray = [255, 128, 64]; color.pop(); //=> Error: Property 'pop' does not exist on type 'FixedLengthArray'. ``` +[Playground Link](https://www.typescriptlang.org/play/?exactOptionalPropertyTypes=true#code/JYWwDg9gTgLgBDAnmApnA3gMWADxQEwBkUA7AcxgAsBBKKAQ0QF84AzKCEOAciVQFpWKAM4xuAbgBQkgMYQSouHIA20AFxxseIqQo06jADwkAriABGKKABo4AZgB8cALxwA2gCYArF9sBGDwAOWwA2ABYAXSlJAHoYuAABGGF+FBxUGRhUumhZCFUoADpIMAAKAEopOOcnAFEcqA0ABQ5UWEQeEu44fAgROBIIeDTgRXkEZDRuLQJicipaBkRjM0sbewduQqA) Use-cases: - Declaring fixed-length tuples or arrays with a large number of items. @@ -86,6 +88,7 @@ function toHex([r, g, b]: readonly [number, number, number]) { console.log(toHex(color)); // `FixedLengthArray` is assignable to `readonly [number, number, number]`. ``` +[Playground Link](https://www.typescriptlang.org/play/?exactOptionalPropertyTypes=true#code/JYWwDg9gTgLgBDAnmApnA3gMWADxQEwBkUA7AcxgAsBBKKAQ0QF84AzKCEOAciVQFpWKAM4xuAbgBQkgDYp4AYwgzoALjjY8RUhRp1GAHhIBXEACMUUADRwAzAD44AXjgBtAEwBWTzYCM7gA4bADYAFgBdKUklElE4KAJnOCUVKFcABkjJAHpsp0cTc0toiFj4MgTSJJToV18s3Py4QosoErK4MxljNBcatPcGvILTVulcuAABGGF+FBxUBRg5umh2uPoZMEp6auVa2yGmgFFVqHUABQ5UWEQeW244fAgRZoh4eeA40oRkNG5NARiOQqLQGIgjKNLDYHNwAHTjbJwACaEGMyXoJDgAHcoMAYGgYBA4AA3TbAfBwYAkfDABQiBH9DLhJL+AJSJn1JJhDn7AYsly2dxRCYAIWM8EQaIxJBI7xxeIJCGJaOWEFY-DMaJpwipNLpDJySOms3mi2Wlg4bSZhyS6ThnikjUcpytl2uliQ90ez1eco+OC+8B+fH+gO0IL04MhRWsdns8MRUxmcwWKCWKytJVScLAxmElAAFPbPABKJ3DOCutRwK4QG5e7h5gs+l66-1wT7fLGhnjh4G6MGGFrQ+OJo3J01pjOWtb9JIZPyBGxeHxwEtHF1ndQAFT+PFcI7jR5sJ+aUKg4UeXze8HowmEwDIJHoXUJxN7ANwQJ0oP0ELPWE4TgPdUF1dU4DAD1bh4ORI0eegEj1JRwHoGBgDfBEJxNVNzUzOc+ThODdCSUIKxObc4AAYUxDt70fZ9lVg39KEeCwFHofM0HxKldV2BJ6HwfhShkO4oPrT1ECw1hjBIJZgBDCAAAl5kLVw4zIGwzHCdQBOeEhRLcM9jIvcJSwwSQAEgEhgYwoCxAADABiAASdAoDhIkAGUYDxchC18YJSyYNyyE8iAfL8sgAqCkL0DMcLIupaLAuChypCYaQYmEZQUCIiBoqJFScELfpS3LOAJgc-sWKHACLxhewHN4uB6KfF83yYhy9JEu5Dwa89Y1PUyHLhIA) @category Array */ diff --git a/source/get.d.ts b/source/get.d.ts index 06928c837..6e638588d 100644 --- a/source/get.d.ts +++ b/source/get.d.ts @@ -200,6 +200,7 @@ type A = Get; type B = Get, 'foo', {strict: true}>; // => string | undefined ``` +[Playground Link](https://www.typescriptlang.org/play/?exactOptionalPropertyTypes=true#code/JYWwDg9gTgLgBDAnmApnA3gcRTAvnAMyghDgHIlUBaAlAZxjIG4AoFgExQGMAbAQyhoCAVwB2XGMAii4AcxwAeAEJ86KACrIUAGjhdpDOAAU+MABZwUADxgpR7OnAZRgo2XAA+cQX3bSeiE4wLm4A2gC6AHwAFBAARgBW3DAAXHAqapqoumCmZmkm5gCUadgwyqoaWrqFZpGsLJRoAIJgwABK9JCianAAvBgsAJBmwDB0aejDI2MTcM1QUHyIClND6wD6wOxpzq6yrOtDG3QQwlBcKJPT66J8IFfzi8urN+uywABudrvB+xGHI5DAj3YABX4hA5vXD1N5xYCwMwAEVMjz2bkBQ1wgJhh2xLHxLH0PXg8hgADl7mgBtE+G1OnRumo0q0Ol0DCgiv1InIcLT6eyejpyKNxgA6UV0UIABnCYpOZwuKDFdweZCKrAA9Jq+jz+WzGRyWQLDUKubqMB9vqIIf9wkxCKDwUFIbgIp44GJOARXCh2GxtcY8nA+DxTk5hGBILBHHxvChfP5AgIloEIAQXfs6ESDKScJSHgB1MZmWoLVP9OD6hlMx6smsc808snVwVqXShMiSsi6LuzHvkaUDsgK86XYeqlBkcIaljai2t03M+Ym2tNy1fH6ZsL2x0gMGIW1uN3hD1elA+0R+gOauDk6RUPYSOAgCCcFKNLTzStlBTo2QRL2ADMA7oE+qSOmGKC4nOOo8v+bBNOkP6KJ0+hQOwf5-G4uj-pEvYEBAECgeBaTBMI0GwoGFr-me9gXr67BAA) @category Object @category Array diff --git a/source/global-this.d.ts b/source/global-this.d.ts index 9170c18ba..6cde655eb 100644 --- a/source/global-this.d.ts +++ b/source/global-this.d.ts @@ -15,6 +15,7 @@ type ExtraGlobals = GlobalThis & { (globalThis as ExtraGlobals).GLOBAL_TOKEN; ``` +[Playground Link](https://www.typescriptlang.org/play/?exactOptionalPropertyTypes=true#code/JYWwDg9gTgLgBDAnmApnA3gcQDYQEYCG2AKgBbADOAvnAGZQQhwDkSqAtLShTMwNwAoAWzQBRAB4woBHPiIU4AXjizCJcgoBkGAQEgoKAgBMIAO2yIVAGQDyAIQCCVgPrEbAaVEA5AFxweUMCmAOaCVIICABTBuGpklHAEChJSMrHyAJQAdJi2ji5unl58QA) @category Type */ diff --git a/source/greater-than-or-equal.d.ts b/source/greater-than-or-equal.d.ts index 87c7b4368..a88569417 100644 --- a/source/greater-than-or-equal.d.ts +++ b/source/greater-than-or-equal.d.ts @@ -16,6 +16,7 @@ type B = GreaterThanOrEqual<1, 1>; type C = GreaterThanOrEqual<1, 5>; //=> false ``` +[Playground Link](https://www.typescriptlang.org/play/?exactOptionalPropertyTypes=true#code/JYWwDg9gTgLgBDAnmApnA3gcSighjFKAFQAtcA7AeSgFEBHAV1wBsBfOAMyghDgHIkqALQcUAZxh8A3ACgZgtAEE4AXjjY8BYmSq1GLADwBGADRwhAVgB8sgPS2VVhFAYo5CuACFV6nPkKkFNT0TMzGZkY2MvaOzq7uyGgAwj4a-tpBeqHhcNZ2Dk4cLGIoQA) */ export type GreaterThanOrEqual = number extends A | B ? never diff --git a/source/greater-than.d.ts b/source/greater-than.d.ts index 4a13584c8..e88bdedcf 100644 --- a/source/greater-than.d.ts +++ b/source/greater-than.d.ts @@ -20,6 +20,7 @@ type B = GreaterThan<1, 1>; type C = GreaterThan<1, 5>; //=> false ``` +[Playground Link](https://www.typescriptlang.org/play/?exactOptionalPropertyTypes=true#code/JYWwDg9gTgLgBDAnmApnA3gcSighjFKAFQAtcA7AXzgDMoIQ4ByJVAWhpQGcYmBuAFADWaAIJwAvHGx4CxMuQA8ARgA0cNgFYAfIID0eidoRQAriiEi4AIUnSc+QqQor1y3QINHauADZcLYWQ0AGE7GUd5FzU4HX1DYxo-AKA) */ export type GreaterThan = A extends number // For distributing `A` diff --git a/source/has-optional-keys.d.ts b/source/has-optional-keys.d.ts index 75a15542d..936eab39e 100644 --- a/source/has-optional-keys.d.ts +++ b/source/has-optional-keys.d.ts @@ -15,6 +15,7 @@ type UpdateService = { : never } ``` +[Playground Link](https://www.typescriptlang.org/play/?exactOptionalPropertyTypes=true#code/JYWwDg9gTgLgBDAnmApnA3gCQIYGcDyYMwEAdtgDYDSKiuANHIcWZTXfgGYC+cnUEEHADkSVAFpOKXDGEBuAFAKxaAKpgAJthgoAyiigA3YAGMUAHgCipYkjgoAHjtIbccCACMAVihMwAfHAAvBgKAJBQKCAQhigAYsAoFBoAXHA4BEQk5NS0uFY2wEiBjs6uCFAArijhYQD8cAAUnInJaczZbHlcBbaI-gCUwYEACgIgwLgWhhDAGv61aaQosVAK3EA) @category Utilities */ diff --git a/source/has-readonly-keys.d.ts b/source/has-readonly-keys.d.ts index 3361a8285..cfe7a7dd7 100644 --- a/source/has-readonly-keys.d.ts +++ b/source/has-readonly-keys.d.ts @@ -15,6 +15,7 @@ type UpdateService = { : never } ``` +[Playground Link](https://www.typescriptlang.org/play/?exactOptionalPropertyTypes=true#code/JYWwDg9gTgLgBDAnmApnA3gCQIYGcBKK2AJhAHYA2iA0iorgDRyEnlW30DyAZgL5zcoEEHADkSVAFpuKXDFEBuAFBKJaAKphi2GCgDKKKADdgAYxQAeAKJkYwJHBQAPXWWK44EAEYArFKZgAPjgAXgwlAEgoFBAIIxQAMWAUCmIALjgcAiJSSho6XGtbe0Rg51d3BCgAVxRIiIB+OAAKbmTUjJZc9gKeIrskQIBKUOCABSEQYFxLIwhgYkD6jLIUeKglXiA) @category Utilities */ diff --git a/source/has-required-keys.d.ts b/source/has-required-keys.d.ts index 902870045..02a7cfd96 100644 --- a/source/has-required-keys.d.ts +++ b/source/has-required-keys.d.ts @@ -53,6 +53,7 @@ const optD: Options2 = { }; ``` +[Playground Link](https://www.typescriptlang.org/play/?exactOptionalPropertyTypes=true#code/JYWwDg9gTgLgBDAnmApnA3gCQIYGcBKKAjgK7BQoAmA0iorgL5wBmUEIcA5EqgLTMpcMTgG4AUGJ5oA4igB2KKNhjQA8mBjAIc3AB4AKinAAbZWhQAPGPMq44EAEYArFAGMYAPjgBeDGICQYGxgAIwAXHByJCAOiuKBwQBMEUJQwHIA5uJMAGRwABQ4BMRkFDR0eoYmZl6W1nK2CFAkKAEA-BjW1dYRVWCm1gwBEehd-WZtvUbjgwCU4mLp1lDM2K5ofQMoIX7+EBpactjGAMokDgAK2Eogk3Cp6VliQ4tyy6vrcJtmibsUpOQqGdLtdsCAUjA0plshIpHB1JptLgdr5ZAolCooAjDpVplsQh5xHDsUjfqj5IplGoDkiDHifoSJK4kfB9jAAIIREk6FG7IL7cJwAAMABoAvywMkuAALYCcZ7iZk6VkaABCXJpPJ8fOCgtF4qSEU4ss4Yv8Yy2IyGDEVLPsGgAwhrEVrfOgDQKIvqEvspca5WaLWYRgE9prjsCrjcjWzDsc4AA3Y4teX+a0LJVCe0wAAizpxZJ1nuFZolfpNgfpPV2-n+pSB5yjYKNdcBlETyZQqfTYiAA) @category Utilities */ diff --git a/source/has-writable-keys.d.ts b/source/has-writable-keys.d.ts index a941c8fbc..51d0c4a7e 100644 --- a/source/has-writable-keys.d.ts +++ b/source/has-writable-keys.d.ts @@ -15,6 +15,7 @@ type UpdateService = { : never } ``` +[Playground Link](https://www.typescriptlang.org/play/?exactOptionalPropertyTypes=true#code/JYWwDg9gTgLgBDAnmApnA3gCQIYGcDqUwM2ARgDYoDSKiuANHIcWZTXQPIBmAvnF1Agg4AciSoAtFxS4YIgNwAoReLQBVMABNsMFAGUUUAG7AAxigA8AUQB2MYojgoAHrpubccCKQBWKUzAAfHAAvBiKAJBQKCAQRigAYsAo5JoAXHA4BEQkFNS0uNZ2DsEubh4IUACuKJERAPxwABRcyakZzLlsBdxF9kiBAJShwQAKgiDAuJZGEMCagXUZNijxUIo8QA) @category Utilities */ diff --git a/source/if-any.d.ts b/source/if-any.d.ts index b3be8979e..cc09f6558 100644 --- a/source/if-any.d.ts +++ b/source/if-any.d.ts @@ -17,6 +17,7 @@ type ShouldBeTrue = IfAny; type ShouldBeBar = IfAny<'not any', 'foo', 'bar'>; //=> 'bar' ``` +[Playground Link](https://www.typescriptlang.org/play/?exactOptionalPropertyTypes=true#code/JYWwDg9gTgLgBDAnmApnA3gSQGYEEB2iAvnNlBCHAORKoC02KAzjFQNwBQHtaAygBYQArgBsAJgCEUAFShC0AXjg4CiADwBDQgD5OAej0LtCOSi484A4eKkSNUOEpWE1VfBHhbEVADTVsEBC+1ABG9lS6HAZGoeFAA) @category Type Guard @category Utilities diff --git a/source/if-empty-object.d.ts b/source/if-empty-object.d.ts index 4328cdabf..89e820d01 100644 --- a/source/if-empty-object.d.ts +++ b/source/if-empty-object.d.ts @@ -17,6 +17,7 @@ type ShouldBeTrue = IfEmptyObject<{}>; type ShouldBeBar = IfEmptyObject<{key: any}, 'foo', 'bar'>; //=> 'bar' ``` +[Playground Link](https://www.typescriptlang.org/play/?exactOptionalPropertyTypes=true#code/JYWwDg9gTgLgBDAnmApnA3gSQGYFFxIDyARgFYoDGMAvnNlBCHAORKoC02KAzjMwNwAoQWzQBlABYQArgBsAJgCEUAFSjS0AXjg58YImUowAPOmoA+IQHorm8wnUphouJJkLligIZQ423QSIJORUpgDWKIgAXHBeAHaI1AA0LNgQEMwpzMQ+zJaCNnYsOVDMQA) @category Type Guard @category Utilities diff --git a/source/if-never.d.ts b/source/if-never.d.ts index 5d14803f2..44bb0cefb 100644 --- a/source/if-never.d.ts +++ b/source/if-never.d.ts @@ -17,6 +17,7 @@ type ShouldBeTrue = IfNever; type ShouldBeBar = IfNever<'not never', 'foo', 'bar'>; //=> 'bar' ``` +[Playground Link](https://www.typescriptlang.org/play/?exactOptionalPropertyTypes=true#code/JYWwDg9gTgLgBDAnmApnA3gSQGYDkUBuKUAvnNlBCHAORKoC02KAzjDQNwBQX9aAygAsIAVwA2AEwBCKACpQRaALxwc+IlAA8AO0LEAfNwD0RpfoQKUPPnCGjJMqQEMocFWr1aa2iPF0aaABpabAgIINoAIxcaQy4TMyiYoA) @category Type Guard @category Utilities diff --git a/source/if-null.d.ts b/source/if-null.d.ts index ac1877341..4ba74e494 100644 --- a/source/if-null.d.ts +++ b/source/if-null.d.ts @@ -17,6 +17,7 @@ type ShouldBeTrue = IfNull; type ShouldBeBar = IfNull<'not null', 'foo', 'bar'>; //=> 'bar' ``` +[Playground Link](https://www.typescriptlang.org/play/?exactOptionalPropertyTypes=true#code/JYWwDg9gTgLgBDAnmApnA3gSQGYDkCuANoQL5zZQQhwDkSqAtNigM4w0DcAUF-WgMoALCEQAmAIRQAVKPjQBeODgLEAPADsihAHzcA9HvnaEslDz5whIwhJTiAhlDiLlW1TXUR4m4jQA0tNgQEP60AEaONLpcBkbhkUA) @category Type Guard @category Utilities diff --git a/source/if-unknown.d.ts b/source/if-unknown.d.ts index 379e1d692..9fe9f9825 100644 --- a/source/if-unknown.d.ts +++ b/source/if-unknown.d.ts @@ -17,6 +17,7 @@ type ShouldBeTrue = IfUnknown; type ShouldBeBar = IfUnknown<'not unknown', 'foo', 'bar'>; //=> 'bar' ``` +[Playground Link](https://www.typescriptlang.org/play/?exactOptionalPropertyTypes=true#code/JYWwDg9gTgLgBDAnmApnA3gSQGYFUB2A1vhAO74C+c2UEIcA5EqgLTYoDOMDA3AFB9maAMoALCAFcANgBMAQigAqUCWgC8cHAWJl8AHglES5AHz8A9ObUmEKlAKFwxk2QrkBDKHA1ajuvQwk8IY65AwANIzYEBARjABGngxmfJbWCUlAA) @category Type Guard @category Utilities diff --git a/source/if.d.ts b/source/if.d.ts index 419b4202f..3ed870dcb 100644 --- a/source/if.d.ts +++ b/source/if.d.ts @@ -29,6 +29,7 @@ type D = If; type E = If; //=> 'no' ``` +[Playground Link](https://www.typescriptlang.org/play/?exactOptionalPropertyTypes=true#code/JYWwDg9gTgLgBAbwJIDMC+cVQiOByGATzAFMBaFEgZxjwG4AoBo0uAQTgF45UAeGKAFcSAGnyFqeMXgB2EPAD5GAemWcF4yUxYk4AIS48UvFAEMANlVGaqU-HMUq1G2fO3FdAYUN8ARhAhzElMZaQlbaQclBlV1Gzw4AB97N2YPOAARH2MQwjDJSPlo2JdwhOTXPHdWAFFs3hkSADcSKHyIlMcY506gA) @example ``` @@ -40,6 +41,7 @@ type A = If, 'is any', 'not any'>; type B = If, 'is never', 'not never'>; //=> 'is never' ``` +[Playground Link](https://www.typescriptlang.org/play/?exactOptionalPropertyTypes=true#code/JYWwDg9gTgLgBAbwJIDMA0ckGcCCA7ATw2wDkBTANzKgF84UoIQ4ByGAsMgWhTKxhYBuAFDD2nODjgBeTCgA82fAXkBXPAGs8EAO54AfBhbAscAIaEWR7fAsEW+kQHon0-axvnLo8WTgAhGTlFLHIqKHk8SmpDVhM4KPCrDwh4ROoHZ1d3Y1N0qBYgA) @example ``` @@ -53,6 +55,7 @@ type A = IfEqual; type B = IfEqual; //=> 'not equal' ``` +[Playground Link](https://www.typescriptlang.org/play/?exactOptionalPropertyTypes=true#code/JYWwDg9gTgLgBAbwJIDMA0ckGcCiBHAVwEMAbAXzhSghDgHIYBPMAUwFoUWsY6BuAKH5NWmFPmIkAPABUMAVQyoAQlCIA7AMYALDDhJYWK9doB8cALyjJ2caRnyTilEc064egy9MChzFnABBC1FbKW4oYDUAcwxwyJj6FkJSOgw6NQh4JIk6EwEAenzzMzpslMFhfyVg1FDJOOiMNQIQACMWKDSyklT6DKzknrz+QuK+zLhuuiA) Note: Sometimes using the `If` type can make an implementation non–tail-recursive, which can impact performance. In such cases, it’s better to use a conditional directly. Refer to the following example: @@ -88,6 +91,7 @@ type IncludesWithoutIf = type Works = IncludesWithoutIf; //=> 'not found' ``` +[Playground Link](https://www.typescriptlang.org/play/?exactOptionalPropertyTypes=true#code/JYWwDg9gTgLgBDAnmApnA3gSQGYBo6YDOAogI4CuAhgDb4DKMUwAdgOYBKKqlMAvnNigQQcAORJUAWmwpCMUQG4AUEoloAEuWYATKCm0AtFENlwAvHAZM2nbjAA8ogAyj8ARidOAfMqUB6PzgAFQALNGwIamoIAHcWVjhQMGoUEBRmGB5gCGZEwjhmCHhM4Go4PQBjcihCYAA3FFVkNExmCupybVl7OjgUAA8YdO18uWtWfABhEMooPsHh0cZ4r3MlAEhegaGdfIADABJ0Fhk5gDFgGr4jk+M4TjlePY31gH4CbHsiMipqewurlMZlAvLgXutRBEtNpXODWu1Ot0HjAgbMvF4XgAuMSFeBQnSKFQBODqdIVFD4FhySgZYBZHL5OIwEJwaJsOBjeKM0plbCUUr+QIAARghEkA1QFRg4qgQigTVQcDO-Oo+Qs8I6XUI9k0Oj0hmMEFk+FEblEPkFcCt1ptcAAfg7HU7nS7XXbLcRZdBsUFmolmNTafTcsB8gNyYRag1qIg4F0uHAado4JBI8AAEYx-3YFjAIYAOiJgXUsRQDSglOwcBiaHIhDQlA5SRScAqOW0eeyzBo-rkKEoyYgVb2OD2+GZaGbqXSmRgXbg6ZQbbS+RK1EklWqUcaagIbU1sgA6nmQhByDAcD15jsRhzlmxUXNtos7+NVmYNlsFrs4IdjsxTiVS5HhuAC7mRJ4Xneb4KBof5gJROBpjRa8X0YchGnWLD3khM8CXBbENURQhj2ZM8L0+ZFHwxLDsVEXEBDwmFfGJAA5WJKQDTIgznBlqxPVkcgSTk2G5KJq2gABrBU0EPKS1T3BEtVI09z0vXVdH0IwTEIE0zQtAIzFWeiikY6FRCAA) @category Type Guard @category Utilities diff --git a/source/includes.d.ts b/source/includes.d.ts index 7968bf172..898b49f2d 100644 --- a/source/includes.d.ts +++ b/source/includes.d.ts @@ -11,6 +11,7 @@ import type {Includes} from 'type-fest'; type hasRed = Includes; ``` +[Playground Link](https://www.typescriptlang.org/play/?exactOptionalPropertyTypes=true#code/JYWwDg9gTgLgBDAnmApnA3gSQHYGMA2ArgCYoDOAvnAGZQQhwDkSqAtNeTIwNwBQvLNAAsAhmQBKKYgB4RUKCMRwUADxgpsxMnBHZEAbQC6APjgBeODgIlys+YoA0TKFMbHuQA) @category Array */ diff --git a/source/int-closed-range.d.ts b/source/int-closed-range.d.ts index 7c34ff520..0e7a2e24b 100644 --- a/source/int-closed-range.d.ts +++ b/source/int-closed-range.d.ts @@ -26,6 +26,7 @@ type FontSize = IntClosedRange<10, 20>; type EvenNumber = IntClosedRange<0, 10, 2>; //=> 0 | 2 | 4 | 6 | 8 | 10 ``` +[Playground Link](https://www.typescriptlang.org/play/?exactOptionalPropertyTypes=true#code/JYWwDg9gTgLgBDAnmApnA3gSQHYwMIA2EAzigCYBKAhtgOYoC+cAZlBCHAORKoC0zKYjE4BuAFBieaAIL04AXjg58RUpRr0APAAYANHACMAJm0A+cQHoL803G1wAPocdwjLgHSeXBgwE5vJhJScABiELgAysAAXmiKyoQk5NR0KJoGeq5mlta2Gd4GAd4AzN4ALN4ArN4AbN4A7N4AHN7+ToGSyGgAogBuKNgAcgCuIABGKFAKSriJailamRn6RuZiVjZ2Lm5OFU51Ti1OGUA) 2. This can be used to define random numbers in a range. For example, `type RandomNumber = IntClosedRange<0, 100>;` @@ -39,6 +40,7 @@ type ZeroToNine = IntClosedRange<0, 9>; type Hundreds = IntClosedRange<100, 900, 100>; //=> 100 | 200 | 300 | 400 | 500 | 600 | 700 | 800 | 900 ``` +[Playground Link](https://www.typescriptlang.org/play/?exactOptionalPropertyTypes=true#code/JYWwDg9gTgLgBDAnmApnA3gSQHYwMIA2EAzigCYBKAhtgOYoC+cAZlBCHAORKoC0zKYjE4BuAFBieaAFoo2AFQgA5YNjQBeODnxFSlGvQA8ABgA0cAJwA+cQHpb6q3GNwAPnACMbuACZvAZm8AFm8AVm8ANm8Adm8ADm8LCSk4AAkAV2wyKHJiOE1tQhJyajoUQw9jM0sq80rjGzF7R08q7x82939OuCCe0J6InuieuJ6LKqA) @see {@link IntRange} */ diff --git a/source/int-range.d.ts b/source/int-range.d.ts index 40a4fae2d..80e73be78 100644 --- a/source/int-range.d.ts +++ b/source/int-range.d.ts @@ -26,6 +26,7 @@ type FontSize = IntRange<10, 20>; type EvenNumber = IntRange<0, 11, 2>; //=> 0 | 2 | 4 | 6 | 8 | 10 ``` +[Playground Link](https://www.typescriptlang.org/play/?exactOptionalPropertyTypes=true#code/JYWwDg9gTgLgBDAnmApnA3gSQHYwEoCG2A5igL5wBmUEIcA5EqgLSUoDOM9A3AFC9M0AQVJwAvHBz4ipADwAGADRwAjACZ5APj4B6HWM1x5cAD6rTcNRYB0tiypUBOfoLgAxCLgDKwAF5oJKUISFFkVJUstXX1DcPsVeyszFQBmewAWewBWewA2ewB2ewAOe2cBZDQAUQA3FGwAOQBXEAAjFChxSVxguQiHZTVtXj0DIwskuEyzfLNS5PkgA) 2. This can be used to define random numbers in a range. For example, `type RandomNumber = IntRange<0, 100>;` @@ -39,6 +40,7 @@ type ZeroToNine = IntRange<0, 10>; type Hundreds = IntRange<100, 901, 100>; //=> 100 | 200 | 300 | 400 | 500 | 600 | 700 | 800 | 900 ``` +[Playground Link](https://www.typescriptlang.org/play/?exactOptionalPropertyTypes=true#code/JYWwDg9gTgLgBDAnmApnA3gSQHYwEoCG2A5igL5wBmUEIcA5EqgLSUoDOM9A3AFC9M0ALRQ0AKhABywbGgC8cHPiKkAPAAYANHACM6gHx8A9Ebn646uAB9d1uACY7AZjsAWOwFY7ANjsB2OwAOOwBOfkE4AAkAV2wAEygUOPY4BSVCEhRVPS04EPUdbRzDXhMzXXVLG3tK51qbV3q4DybvJr8mwKb89SA) @see {@link IntClosedRange} */ diff --git a/source/internal/array.d.ts b/source/internal/array.d.ts index 972602126..fe6b92666 100644 --- a/source/internal/array.d.ts +++ b/source/internal/array.d.ts @@ -33,6 +33,7 @@ type A = [string, number, boolean, ...string[]]; type B = StaticPartOfArray; //=> [string, number, boolean] ``` +[Playground Link](https://www.typescriptlang.org/play/?exactOptionalPropertyTypes=true#code/C4TwDgpgBAglC8UDaBnYAnAlgOwOYBopsBXAWwCMJ1DyB7WgGwgENtCA6TtLPJAXT4BuAFChIUAEIIoAZWDNgmAMYAFZumAB5AGYx06ZiAA8MAHwiA9Bfink3HASJlK1KHUYtsfIA) */ export type StaticPartOfArray = T extends unknown @@ -52,6 +53,7 @@ type A = [string, number, boolean, ...string[]]; type B = VariablePartOfArray; //=> string[] ``` +[Playground Link](https://www.typescriptlang.org/play/?exactOptionalPropertyTypes=true#code/C4TwDgpgBAglC8UDaBnYAnAlgOwOYBopsBXAWwCMJ1DyB7WgGwgENtCA6TtLPJAXT4BuAFChIUAEIIoANWZZm5JgAV5wAPIAzGOnTMQAHhgA+EQHoz8Y1G45c-IA) */ export type VariablePartOfArray = T extends unknown @@ -74,6 +76,7 @@ type ReadonlyResult = SetArrayAccess; type NormalResult = SetArrayAccess; //=> string[] ``` +[Playground Link](https://www.typescriptlang.org/play/?exactOptionalPropertyTypes=true#code/C4TwDgpgBAShCGATA9gOwDYgIICcfxCgF4ocEUNCBnYHAS1QHMBtAXQG4AoUSKAOWQ4AtvHS58hEjXpM2XbuGhwkaTHCoBXdMGJQAyhGDiCWAMamIVKgB4Bw0cZAAaKLQ0QAfFwD03oh9JyVWpaBhZWTgVeOxF0dS0dEgMjPBNzSxtlCkxHFwAzUSpPHz8A6TC2IA) */ export type SetArrayAccess = T extends readonly [...infer U] ? @@ -104,6 +107,7 @@ type C = CollapseRestElement<[string, string, ...Array]>; type D = CollapseRestElement<[string, number]>; //=> [string, number] ``` +[Playground Link](https://www.typescriptlang.org/play/?exactOptionalPropertyTypes=true#code/C4TwDgpgBAglC8UDCB7ANmghmAzhAShDsAKJoQC2EAdsADwDaxATgJbUDmANFC+91AB0w6gFcKAIwjMGAXVkA+ANwAoAPRr4CqE2BtOPPgahjJ02SpWhIUAEIJk6LLgJFS5KrUbDBRjnJ5TKWZA8WDFVQ0tHT9QsxCTMPNLa2gkB1QMbDxCYjJKGnpdfQFYoWEYZmZMEDog6SgAHygJVg52YAUI9U1tYv5DPQHE+KaWto6LK3BoABEMp2zXPI9CxjL65m6ovo2kraA) Note: Optional modifiers (`?`) are removed from elements unless the `exactOptionalPropertyTypes` compiler option is disabled. When disabled, there's an additional `| undefined` for optional elements. @@ -117,6 +121,7 @@ type A = CollapseRestElement<[string?, string?, ...number[]]>; type B = CollapseRestElement<[string?, string?, ...number[]]>; //=> [string | undefined, string | undefined, number] ``` +[Playground Link](https://www.typescriptlang.org/play/?exactOptionalPropertyTypes=true#code/PTAEAMFMA8EMGMAuB5ADoglgewHawDYAKATlqpMYgJ4AqV5AzuKJHgEb6QAmAUNeaACCoALygAwlnz5YqBpABKkBogCinALatEAHgDaK4hhwBzAPwAaUIePmrAOkc4ArhrYU9AXU8A+ANw8ICI+oAaIRqZWNpGgLm4UnjyBYFBwSGiYuAQkZBTUdIzMXBgMsBzcfPSQoABCohJSMnKKymqa2vrRdtbhtpagjvZx7sRevgFBIWERJqAAPqDOOFyQAGbG3FG9pvOLy2sbXFbDCUA) */ export type CollapseRestElement = IfNotAnyOrNever>; diff --git a/source/internal/enforce-optional.d.ts b/source/internal/enforce-optional.d.ts index 9285fe1f4..a8ed6ed20 100644 --- a/source/internal/enforce-optional.d.ts +++ b/source/internal/enforce-optional.d.ts @@ -36,6 +36,7 @@ type FooBar = EnforceOptional; // d?: number; // } ``` +[Playground Link](https://www.typescriptlang.org/play/?exactOptionalPropertyTypes=true#code/JYWwDg9gTgLgBDAnmApnA3gUQHYDNoDGKA8mDMBNgIYA2AvnLlBCHAORKoC0uKAzjDYBuAFAjOaAGIQIcALwYRASCoAuOAKjBsAc1FKARgH51m7XuUF1AV2wATFLm0o7+u+uzWQBlFDgAfOFsHJ2wXUTpRcWQpGQAhKj8FHHwoIlJySloAHmkIAD5RAHoi+XzFErgVUxgtXWLSwxMNWvMGqqsg+0dnVxFKpTtmz29fdrogA) @internal @category Object diff --git a/source/internal/keys.d.ts b/source/internal/keys.d.ts index 6531c99ee..d1385b43a 100644 --- a/source/internal/keys.d.ts +++ b/source/internal/keys.d.ts @@ -83,6 +83,7 @@ type Key3 = ExactKey; type Key4 = ExactKey; //=> '1' ``` +[Playground Link](https://www.typescriptlang.org/play/?exactOptionalPropertyTypes=true#code/C4TwDgpgBA8gRgKwgY2FAvFA3gKAJAAMAXFAHYCuAtnBAE4Dc+A5AIxMkDOwtAlqQOaMAvoxyhIUANIQQLDFACiADwCGqaSAA88JKgA0UJgSYA+RgHpz6E1AJjw0DQCZ5ytcA3bEKYAYJmcS2tbHHsJDQBmV1V1GS9dX0M2AKCbViYwxxkAFmj3Tx0fAxYUqzS2IA) @category Object */ diff --git a/source/internal/numeric.d.ts b/source/internal/numeric.d.ts index 82db3b10b..faa855901 100644 --- a/source/internal/numeric.d.ts +++ b/source/internal/numeric.d.ts @@ -18,6 +18,7 @@ NumberAbsolute<1>; NumberAbsolute //=> PositiveInfinity ``` +[Playground Link](https://www.typescriptlang.org/play/?exactOptionalPropertyTypes=true#code/HIVwtgRgpgTgghAzgewDYgC5QDwFoCMAfANwBQA9OQLyEAE+ppoksCK6W2RZlN9jzaPCRpMOYFADmAQwwBLAG5QAkgDsAZnNVyMAT0IVqdAArJEOxSo1aduoA) */ export type NumberAbsolute = `${N}` extends `-${infer StringPositiveN}` ? StringToNumber : N; @@ -68,6 +69,7 @@ type C = UnionMin; type D = UnionMin; //=> never ``` +[Playground Link](https://www.typescriptlang.org/play/?exactOptionalPropertyTypes=true#code/C4TwDgpgBAglC8UCqA7AlgexQWTSgPAIxQA+UAzKVAEwB8A3AFAD0z8tUhjjokUAQgmTosuAigCuAWwBGEAE4MWbDpNkLuvaAGEhqTDjz4AhihBLW7KKZCbw0ACJ6Rh8RABuCiyqgoPCoA) */ export type UnionMin = IsAnyOrNever extends true ? N @@ -103,6 +105,7 @@ type C = UnionMax; type D = UnionMax; //=> never ``` +[Playground Link](https://www.typescriptlang.org/play/?exactOptionalPropertyTypes=true#code/C4TwDgpgBAglC8UCqA7AlgexQWQIYA8AeARigB8oBmcqAJgD4BuAKAHpX56rnnRIoAQgmToseIigCuAWwBGEAE5M2HLlLmKefaAGFhqTDgKFcKEMvacopkFvDQAIvtFGJEAG6KLqqCg+KgA) */ export type UnionMax = IsAnyOrNever extends true ? N @@ -138,6 +141,7 @@ ReverseSign ReverseSign //=> NegativeInfinity ``` +[Playground Link](https://www.typescriptlang.org/play/?exactOptionalPropertyTypes=true#code/EoUwbiBODOIMoEsDmA7APAWgIwD4DcAUAPREC8OABFgQaBDPMuroSeRdjXVLIqmgDkQSAIYAXBBACSKAGYIUCMQE8cxMpQAKAe2hLJIGfMUqu4Ho3469E6XIVLV69kNG3D9k8qA) */ export type ReverseSign = // Handle edge cases diff --git a/source/internal/object.d.ts b/source/internal/object.d.ts index 448fcb04d..69dbfb8e6 100644 --- a/source/internal/object.d.ts +++ b/source/internal/object.d.ts @@ -25,6 +25,7 @@ type A = BuildObject<'a', string>; type B = BuildObject<'a', string, {readonly a?: any}>; //=> {readonly a?: string} ``` +[Playground Link](https://www.typescriptlang.org/play/?exactOptionalPropertyTypes=true#code/C4TwDgpgBAglC8UBCBXAlgGwCYHkBGAVhAMbAA8A5AIYUA0UAzsAE5oB2A5gHwDcAUAHoB8LlADeVAFyMW7DgF8+ggVADCAezAgoAA2YQqWdWwwgdUKmyy6A-OYBmzdQFsowABbQA1hG06q5ur2umL6hsamFjbSliDyOnygkMgIyOjY+ESklDT0TKyc9KEGRibaVNEWbHG8yiLiYaWRFdL5cvJAA) */ export type BuildObject = Key extends keyof CopiedFrom @@ -79,6 +80,7 @@ type OptionalizedUser = UndefinedToOptional; // lastName?: string; // } ``` +[Playground Link](https://www.typescriptlang.org/play/?exactOptionalPropertyTypes=true#code/C4TwDgpgBAqgzhATlAvFA3gKAJADMCWicwAcgIYC2EAXFMYvgHYDmA3DgDZnHlW31NmUAD5QArowAmEAowiT2AX3aZQkKAHkwwfAHtGZDvgBe8+ElSwpMpvIAqurTv2GAPOcQA+dgHofKTwxMPyg8Qh5KGjpgBhZfH1CuCKoAfn4YwXioRSA) */ export type UndefinedToOptional = Simplify< { @@ -139,6 +141,7 @@ Extract all possible values for a given key from a union of object types. type Statuses = ValueOfUnion<{ id: 1, status: "open" } | { id: 2, status: "closed" }, "status">; //=> "open" | "closed" ``` +[Playground Link](https://www.typescriptlang.org/play/?exactOptionalPropertyTypes=true#code/C4TwDgpgBAysCGwCuBnCKoF4oDV4BskIB5AMwFUA7ASwHtKAeAbymoBMAuKARgBooUCZCi4AiWpEqioAXygAfKC3ZcATP0GJUYgMb5aaNtJn9Rm4aIB8AbgBQAenuZLUcZOmLRegxCNA) */ export type ValueOfUnion> = Union extends unknown ? Key extends keyof Union ? Union[Key] : never : never; @@ -162,6 +165,7 @@ type Post = { type ReadonlyKeys = ReadonlyKeysOfUnion; //=> "id" | "author" ``` +[Playground Link](https://www.typescriptlang.org/play/?exactOptionalPropertyTypes=true#code/C4TwDgpgBAqgzhATlAvFA3gKAJDcRAQwBMB7AOwBsQoBLIgLijmERrIHMBuHbMggWwiNmrDtwC+3TKEhQACiWaoMPfMXJVaDJizZdVhUpWoEArsAAWJRMN1ieAIxJEQt0fsmZp4aACVDGiAA0hAgcMr+6sYhYQDyAGYwZDTkADzwSFAAPvKKwAB83AD0RSj5UABEdBXZlWaW1hVAA) */ export type ReadonlyKeysOfUnion = Union extends unknown ? keyof { [Key in keyof Union as IsEqual<{[K in Key]: Union[Key]}, {readonly [K in Key]: Union[Key]}> extends true ? Key : never]: never @@ -179,6 +183,7 @@ type SpecifiedOptions = {leavesOnly: true}; type Result = ApplyDefaultOptions; //=> {maxRecursionDepth: 10; leavesOnly: true} ``` +[Playground Link](https://www.typescriptlang.org/play/?exactOptionalPropertyTypes=true#code/C4TwDgpgBACghsAFgZwPJmASwPYDtlQC8UA3gLZwAeAShAMYCuATsjrgCIQaID8AXFFwMyAIwhMA3FAA2EOADcIaXNJD8oI7NllxcAXwkAoUJCicAZnAbTg8JGgxsCxclVqMWbTtwEBGAAxSOorKqgKW0sgQBsbg0ADKkHSY5pgQACboWHjOpMFKqCogAsBMDNFGsaa0yNbARFAAgmBgqhZWNllOADx2KF05ADRmEJZ1fQ7Z+MOJ9ClpmY45AHxGAPRrhMukFDT0zKx43kh+gTJyIYVhUKXlekA) @example ``` @@ -192,6 +197,7 @@ type Result = ApplyDefaultOptions; type E = CollapseLiterals | null | undefined>; //=> string | null | undefined ``` +[Playground Link](https://www.typescriptlang.org/play/?exactOptionalPropertyTypes=true#code/JYWwDg9gTgLgBDAnmApnA3gGWDFUCGANgKoB2wEpAvnAGZQQhwDkSqAtLSgM4zMDcAKEFs0AQTgBeOAGEIhQvjDcU2XAULcAPM1oQIzOAB8WAI3xRDJgBS8owUgHM4AMgxUAlAD4hAel+SXnB2Do7ConAAQlKy8orKqjh4RNpqySTklFoAjMZwAEx5AMwANHCkAK4gpnhePoL+geVVNVDhyGgyMXIKSippGqlJGmQUpDqUMoTAAMYA1lYskwAW+E4ozGUABpQAJOghTlRbdX4BQTuk+4eOx+2ocAAi3XF9ieopOjPT84vMM6t1otrJdrjB7Ectq53N4zk1-j8Fnl-oDHBs8qCDuDQncRB04ABRF69BIDT5kjJjHR6AzI8yWMo3IImSoKPIVUgAExQtAcKE59UaQRueVZhHZXJ5fM5QA) */ export type CollapseLiterals = {} extends T ? T diff --git a/source/internal/string.d.ts b/source/internal/string.d.ts index 4d2d5c66b..d828af762 100644 --- a/source/internal/string.d.ts +++ b/source/internal/string.d.ts @@ -33,6 +33,7 @@ type PositiveInfinity = StringToNumber<'Infinity'>; type NegativeInfinity = StringToNumber<'-Infinity'>; //=> -Infinity ``` +[Playground Link](https://www.typescriptlang.org/play/?exactOptionalPropertyTypes=true#code/C4TwDgpgBACg9gZwJbCQNwgSQHbCgXigGVgAnJbAcwBU4A5AVwFsAjCUgHgHIBGAJgDMAFi4A+ANwAoAPTT8oqP2GTJoSFDoRKAQ1QYceQiXJVajVu24BaJSIky5Cm4KEq10eMj0QAYgBs4XQJiMgoaemY2Tl4XADoAVgA2MSlZeUU4pLdwaE0db39AwxCTcPMo61sE5Ps0pyqs1RzYRBR0LGwAMwoUEGDjMLNIyy4cbuxelId0sZ7QbPU83XbZidB+0NMIi2irVcnaxyg9rrmQIA) @category String @category Numeric @@ -63,6 +64,7 @@ StartsWith; StartsWith<'abcde', string>; //=> never ``` +[Playground Link](https://www.typescriptlang.org/play/?exactOptionalPropertyTypes=true#code/MoFwhgTiDODqCWIAWAeA5GARgYwCYFM0AaAAgxzQD4BuAKAHp6BeSkkCAV31ttEhgTJ0WPIVJoKNBs1YAzMABto3XuChxEqaO3gA7AObjJdRixK78AN3wQefdYNTlRxEtoh79U06wvWIQA) @category String @category Template literal @@ -84,6 +86,7 @@ StringToArray<'abcde'>; StringToArray; //=> never ``` +[Playground Link](https://www.typescriptlang.org/play/?exactOptionalPropertyTypes=true#code/MoFwTglgdg5gKgewIJjAQwJ4B4DkaBGAxgCYCmOAfANwBQA9HQLwUAEA2njgDQs77e9CAnMWHkAujRqhIsRCnTYAzuGgxq9JqyikAbqTBA) @category String */ @@ -104,6 +107,7 @@ StringLength<'abcde'>; StringLength; //=> never ``` +[Playground Link](https://www.typescriptlang.org/play/?exactOptionalPropertyTypes=true#code/MoFwTglgdg5gMgU1iAFgHgOQEMBGBjAEwQwD4BuAKAHoqBeEgAgFYKLRJZFl0BncaGOWp1GUBADcEYIA) @category String @category Template literal @@ -168,6 +172,7 @@ PositiveNumericStringGt<'1', '1'>; PositiveNumericStringGt<'1', '500'>; //=> false ``` +[Playground Link](https://www.typescriptlang.org/play/?exactOptionalPropertyTypes=true#code/AoewzglgLhBuCmA5ArgW3gJwgYwMpSwDsBzAcSgB4ByAVgAY6qAaAAioEYqA+AbgCgA9AIC8XFgWTw+fUJBgIU6LHgIQS5ap1Ydu-IaJYAzAIYAbMFJnhocJGkw58RMpR3b6jXoJFiT5+EA) */ export type PositiveNumericStringGt = A extends B ? false diff --git a/source/internal/tuple.d.ts b/source/internal/tuple.d.ts index 61ef3d74d..0f2dfc523 100644 --- a/source/internal/tuple.d.ts +++ b/source/internal/tuple.d.ts @@ -20,6 +20,7 @@ type Array = TupleLength; type Union = TupleLength<[] | [1, 2, 3] | Array>; //=> 1 | 3 ``` +[Playground Link](https://www.typescriptlang.org/play/?exactOptionalPropertyTypes=true#code/C4TwDgpgBAKgrmANtAvLByAyEB2BzYACwB4BtAZ2ACcBLfAGihzgFsAjCKxtgex+QCGOALoA+ANwAoAPTSUoqAGZJk0JCgBBKlQEgoaeEgjZ8RYpVr5SYqbPlMIAN04rZUAMoIwPKsHJQ4HBoeHCg1CHIAOlVwaABVIJD9dCMTAhJrKAAfKFIARkYAJkZFYWzNbV1iZnZOUQkZOQU88sUgA) */ export type TupleLength = // `extends unknown` is used to convert `T` (if `T` is a union type) to @@ -44,6 +45,7 @@ ArrayMax<[1, 2, 5, 3]>; ArrayMax<[1, 2, 5, 3, 99, -1]>; //=> 99 ``` +[Playground Link](https://www.typescriptlang.org/play/?exactOptionalPropertyTypes=true#code/IIJxEME8FlwDwDwG0CMAaABAJkwVkwMwC6AfANwBQA9FQLwka4UWgQzzLrZ6GYCcfTAFoUpSjXoYBQA) */ export type TupleMax = number extends A[number] ? never : @@ -67,6 +69,7 @@ ArrayMin<[1, 2, 5, 3]>; ArrayMin<[1, 2, 5, 3, -5]>; //=> -5 ``` +[Playground Link](https://www.typescriptlang.org/play/?exactOptionalPropertyTypes=true#code/IIJxEME8FkEsDsA8BtAjAGgAQCYsFYsBmAXQD4BuAKAHpqBeUzVSy0CGBFDHfIrAWjxkqtBpkFA) */ export type TupleMin = number extends A[number] ? never diff --git a/source/internal/type.d.ts b/source/internal/type.d.ts index e2a2b5655..70f433258 100644 --- a/source/internal/type.d.ts +++ b/source/internal/type.d.ts @@ -64,6 +64,7 @@ IsPrimitive IsPrimitive //=> false ``` +[Playground Link](https://www.typescriptlang.org/play/?exactOptionalPropertyTypes=true#code/JIZwCgTglgtlAuUBuBTAPAchPaA7A5hgHwBQA9GQLxEAEOAriiSaJLAsutnvqRdXQiNmraHESo0AeQBGAKxQBjeHyq0AZgEMANiBRA) */ export type IsPrimitive = [T] extends [Primitive] ? true : false; @@ -78,6 +79,7 @@ Not; Not; //=> true ``` +[Playground Link](https://www.typescriptlang.org/play/?exactOptionalPropertyTypes=true#code/HIewLgPGBOCuCmA+A3AKAPToLyIAQDMBDAGwGd5VVRIiyk1MdcYEg) */ export type Not = A extends true ? false @@ -102,6 +104,7 @@ type B = IfNotAnyOrNever; type C = IfNotAnyOrNever; //=> 'IS_NEVER' ``` +[Playground Link](https://www.typescriptlang.org/play/?exactOptionalPropertyTypes=true#code/PTAEHUAsFMDtQAYBUGgJYGdQENQDkB5JRbWAT1QHsAnRWaAN2mtQAoAbNAa2kQwBdqaWAHMEASlABeAHygAStH4BXarCwIAkgDM8lfgEFyBankbNUAI2qkAxpABQ-MgAdeB6aB17Dx0+eoAHgEhUQAaUAByADUDABlNABFIiMjNAGUAfQM8AE0UqIzMvABRaJL5SJkAbgcQWSjYhOSHOrAoOEQUdA1SCmk5RRU1DR0jfus7R2c3UAAhT299cZMzJiC+1KakgrSsnPzUotLyypq2hr3svMjWkAgYeGRUTDoA1Aah1XVEb3fQSawexOVy8ADCi10yz8a2YgXo6y28R2R32N1RxTKFSqtXqciuJ2xQA) Note: Wrapping a tail-recursive type with `IfNotAnyOrNever` makes the implementation non-tail-recursive. To fix this, move the recursion into a helper type. Refer to the following example: @@ -128,6 +131,7 @@ type _TrimLeftOptimised = S extends ` ${infer R}` ? _TrimLeftO type T2 = TrimLeftOptimised; //=> '' ``` +[Playground Link](https://www.typescriptlang.org/play/?exactOptionalPropertyTypes=true#code/JYWwDg9gTgLgBDAnmApnA3gZRlYA7AcwCUVUBDGAXzgDMoIQ4ByJVAWhpQGcYmBuAFADWaAHL4UACQCueACZQUc8XhRIVKTGDIBjbnAC8cbLkIlyMADxNmAGjgBOJwD5BAgPTu4AFQAWaGggAGyCIAHd8AjhQMCCUEBQ8GApgCDxorjg8CHhk4CC4RR1pKC5gADcUYWQ0b1wQABkUGitMOBQADxhEuUyeUwJnQzgASRpRHIBBPEQAeShRFEqoS0x7Ns7u+UyAAzgAEnR8Tig4Iko9gH4feqaWyyIhgC5jVyFPOElEvXt8HjIksAUmlMhEYL44KFCHB+pFQfkCjQyPkPF4AAIwLhsTqoHQwbFQehQaqoHwARmGdVAdysGhk8kUygk6gkWl03DeHzg3J5cAAfgLBULhSLRWK+ai4ABRQnQF7eGrRPD-QHA9LATKdPRcMqVIKIOByFCkOAAuRwSA64AAI31Spo+GA3QAdO8vN4ILRgB0EL4NfYQBBKr60EUSmU0kqYJ6yHB-EFUKcRCTardmjBZmAYKANUpVu0uj0+jhIkMjGMJjBpnMFksUCs1nAAPpUxrpzPZkC5uSrZxvFPN1s0js5rh5jaF7YwkuEMvGAtbXpwPaHY71s4XODXFtplojrtjnuPOAvTBuEQ+ABMlN3Gazo7zdNkCiUGhZqjZ2s57gMQyYTCAA) */ export type IfNotAnyOrNever = If, IfAny, If, IfNever, IfNotAnyOrNever>>; @@ -151,6 +155,7 @@ type B = IsAnyOrNever; type C = IsAnyOrNever; //=> true ``` +[Playground Link](https://www.typescriptlang.org/play/?exactOptionalPropertyTypes=true#code/PTAEHUAsFMDtQAYBUGgJYGdQENQDkB5JRbWAT1QHsAnRWaAN2mtQAoAbNAa2kQwBdqaWAHMEASlABeAHygAStH4BXarCwIAZtnYZoCAFD8yAB14BBaaACSGc+QLU8jZgB4BQ0TIDcBkLNBtXWgDPzAoOEQUdA1SCmk5RRU1DUFlfSNTXgAhK1t7MkdnJmpXOJ8wgLSQsIgYeGRUTDoXFgSFJVV1RGrDYzNQAGE8uwcnVtd6Eor-OWqgA) */ export type IsAnyOrNever = IsNotFalse | IsNever>; diff --git a/source/invariant-of.d.ts b/source/invariant-of.d.ts index 3e821c768..80e89df8c 100644 --- a/source/invariant-of.d.ts +++ b/source/invariant-of.d.ts @@ -32,6 +32,7 @@ let invariantCatArray: InvariantOf[] = [new Cat('tom')] as InvariantOf // @ts-expect-error invariantAnimalArray = invariantCatArray; // Error: Type 'InvariantOf[]' is not assignable to type 'InvariantOf[]'. ``` +[Playground Link](https://www.typescriptlang.org/play/?exactOptionalPropertyTypes=true#code/JYWwDg9gTgLgBDAnmApnA3gSQHYDcCGUw+2MA8gGYC+cFUEIcA5EqgLQUoDOMTA3ACgBAYwA2+LlzgBBbKHyiMAgJDCI2HlACuwmNAAUYLQCNRwYXGz4QKAFxxNwbAHMAlOioDPI8ZLgBhfHgUAA8YFGwAEylZeUV0FRsIAHd9VwxPb1EUeBI46SgofER7WJAFAG0AXTgAXjgK7BRkmTly0X0mACsUQsQmVyrBbPhhIIKikoCg6rqGppbAmE69EAGhoTz2ieK5sZgdxD44AHoTuDIAa13gCjg1AiISGAEthUOAOiMuAAt9BdacU6JAgMB+vTgb1EA1cxzOcAAClpfihIpDsOi4nAnHp7uNCsURPjJh8KNAAKL4YR-Cy1AB89w+SVSrlhp3O0lEohSqLgxi0MAANHBevQoJD4NpSKAUEIRti8IRiKQyu8CVMcI9leQKAAeVWiOmzeqNZqA9qdHp9daQqSapXPSj6toKI0beVOLXPJaHez2p6kJ1LN1zU2LIIrBg2iRwf3aoNBN2CATwgACMC4bFCqF0WcK0AEnodKpdokOcyLAZgPvVcPO5PzUHsABVkGgmHHHXrg9UmNipNhQbauMBnFZTGhcax253A3qDW6mB8gA) @example ``` @@ -73,6 +74,7 @@ keyOfInvariantFooBar(invariantOf(fooBar)); // (keyof FooBar)[] // @ts-expect-error keyOfInvariantFooBar(invariantOf(fooBarBaz)); // Error: Argument of type 'InvariantOf' is not assignable to parameter of type 'InvariantOf'. ``` +[Playground Link](https://www.typescriptlang.org/play/?exactOptionalPropertyTypes=true#code/JYWwDg9gTgLgBDAnmApnA3gSQHYDcCGUw+2MA8gGYC+cFUEIcA5EqgLQUoDOMTA3ACgBAemFwccAMYQCREpLQAKACYoK+AK4AbGAEohwUiijqFcAGIQIAIUIYBASApWAXHGwaQAI2OCHXwjceImwAcwEqAyMTfDNLG0JbAC84FAAPGBRsZS4LK1soe398JLcvKy0UEgihVUktQjRpbB5afMC8hKgBOoaoJogW+Gcu5Ld4guShCg1sSRhgQbgAaxRESgnCRRGC8faoXSL+mA0obDgyLwArFHmAOlXELm39w-xcxUeICk6C3QBtAC6NQEjw2+xeXUOogAvAA+OCfNbfX6EAHAsEUTZQSGTErQ4TwxFfH7Y9FwLwaGAAGmJyNJ+2S5Pw8CgswWIBQQlE4nOhlkxDmXIE6UgsFos3miz5eEIgvIFAAPAAVZAoOGKAhaDQoNyq1C6Nw4AUkBUqtUI9COY6nc5anVwd68k2kSjm1BwwSRAQzOYLJaY41y03Y3EdINyV1K7Fww5Whw2s4Xa63GAPNbPHZox0fEmog5AkGB2WRmCh-nBqNhg66PhwHlIxAosmFkRiAACMC4bFFqZ7UHo3WLLrLEIrpco1aZtfrYgAogPoG4AIJQUKeLLwFGsNBMCPyt3Y5JwphwYC5bAQeDvLjAULYfBeSoICBwMCEfCczKFbdq5j701D32E87iAA) @category Type */ diff --git a/source/is-any.d.ts b/source/is-any.d.ts index 8e7bd54d7..ecab8f6b5 100644 --- a/source/is-any.d.ts +++ b/source/is-any.d.ts @@ -22,6 +22,7 @@ const typedA = get(typedObject, 'a'); const anyA = get(anyObject, 'a'); //=> any ``` +[Playground Link](https://www.typescriptlang.org/play/?exactOptionalPropertyTypes=true#code/JYWwDg9gTgLgBDAnmApnA3gSQM4EEB2iAvnAGZQQhwDkSqAtKStjNQNwBQHAxhPiwmQoAJgHkARgCsU3eAF4MAQwBccAIwAaOONUAmEouxxe-GJxMDFhCdNmqriOAvQr1WnXH2cOpAK75ZYD44AHMUGAAeUTgUAA8YFHxhIwAKHAJEKIA+GPjE5IQoXzQAfgwSVQAlGWhhCJYoYHwQrXxfEHEUKCyASi0AaVyEpKMAaxRECFI4aIVxyenRLJSIKVVRLXnVfp6MDgBIKHDfKHw4VckAbXmAXU4iLgt4OhFcJ1DwlJexKRkYLWoimoPU4AHpQXIcmpHnxLIQ3gowjAUg4bH8AUCQRxwZC4A4gA) @category Type Guard @category Utilities diff --git a/source/is-equal.d.ts b/source/is-equal.d.ts index 0bb0d9d51..c1ee33080 100644 --- a/source/is-equal.d.ts +++ b/source/is-equal.d.ts @@ -21,6 +21,7 @@ type Includes = : Includes : false; ``` +[Playground Link](https://www.typescriptlang.org/play/?exactOptionalPropertyTypes=true#code/JYWwDg9gTgLgBDAnmApnA3gSQM4FECOArgIYA2AvnAGZQQhwDkSqAtFStjAwNwBQvAegFwAKgAtg2BMjRQUMQlAB2U4nABGECKRTEl1aHADuY+aagJTcAObAAbin3EoUYojjAlAY1KEAJhyWaLYO+sAwKCAAdILCAAY4BCSkcR5ShNgofggQcF50YM5oMFYhjnDOru7E8JDY4cAQ+gAMFUrZJcH25eGRbR2m+nIKyghQhGjAVEHVcnAoRGQxzGiY3r4B2AA8AGpkE-MAHhHtUnLEfk2k1UqIANoAugA0cJgRIAB8cAC8vACQe18aBQx0cfjOukuSmucDugImd2azzgUVRnnYFjknAe-z+AH5XnhFqRdvsUIjkW9Il8QSdwWMJrj8QyUEyAFyvdb+DhbLEwF5Uz64jlUMiZbhAA) @category Type Guard @category Utilities diff --git a/source/is-float.d.ts b/source/is-float.d.ts index ee671c526..036610bbb 100644 --- a/source/is-float.d.ts +++ b/source/is-float.d.ts @@ -26,6 +26,7 @@ type E = IsFloat; type F = IsFloat<1.23e+21>; //=> false ``` +[Playground Link](https://www.typescriptlang.org/play/?exactOptionalPropertyTypes=true#code/JYWwDg9gTgLgBDAnmApnA3gSQM4DEA2EAhjADRwAKE2wMwAbipgHYBmwztiAvnK1BBBwA5ElQBaVimwxhAbgBQCsWgCCcALxwcBYjAA8ARgB0AVgB8igPRWN5hFACuKJSrgAhTdryES+8SYW1rb2ME4uyshoAMJeOr4GhijiAOyWCjZ2Ds6uUXAAInE+ekbGAAzpmfasRPjYEW4AokW6flQ0dIws7JxIlSF8tfW5qHC4LQmlAEwAzCgA1FOG-Vk1dShAA) @category Type Guard @category Numeric diff --git a/source/is-integer.d.ts b/source/is-integer.d.ts index c9d466ffd..90e9f0554 100644 --- a/source/is-integer.d.ts +++ b/source/is-integer.d.ts @@ -42,6 +42,7 @@ type I = IsInteger; type J = IsInteger<1e-7>; //=> false ``` +[Playground Link](https://www.typescriptlang.org/play/?exactOptionalPropertyTypes=true#code/JYWwDg9gTgLgBDAnmApnA3gSQM6YHYwoDmKUANHAAoTbAzABuK+AZsHnYgL5wtQQg4AciSoAtCxTYYQgNwAoeaLQBBOAF44OfIRJQAPAEYAfAoD0Z9cYRQArikXK4AIQ1bcBYqSMA6AAym8hZWNvaOyGgAwm7annr6YibmltYwdg5KEXAAIjEeut5+AEaGAckhaWGZqHAAonk6XgZ+EKWBwanp4TUAYg1xhQAebeWdVU4A4v0FBoY+AEwAzCgA1PNJQSmhGU4AEtNNvgCs7VssAIYANtg7WZgH8dS09Eys7JynIRfXtzUAUg9vIYUGIAOyfazfG5AA) @category Type Guard @category Numeric diff --git a/source/is-literal.d.ts b/source/is-literal.d.ts index cfa8e3c48..b57880a1e 100644 --- a/source/is-literal.d.ts +++ b/source/is-literal.d.ts @@ -82,6 +82,7 @@ function capitalize>(input: T): CapitalizedString const output = capitalize('hello, world!'); //=> 'Hello, world!' ``` +[Playground Link](https://www.typescriptlang.org/play/?exactOptionalPropertyTypes=true#code/JYWwDg9gTgLgBDAnmApnA3gSQM4GUZTAB2A5gDLAwpQCGANgL5wBmUEIcA5EqgLTMpsMTgG4AUGJ5oAwjTCV6wAF4oAJvkKkAPABU4KAB5Uiq7HCGaSAPjgBeODg3FylavV03Dx0wigBXNAB+OFl5GEUVDzgALnMCZ3ExAHokuAALGBgwbGiUkko0vwAjADoAY3YkxBoiAGsUFGI6CBMWpKIaGGAANxReVRpsNKSi5qKkkEGqKCTsKDKksrkFOmUUEphsMWY-IjKulrglsIiUXX0jFBMzACUUGlUWukQtC2crKwAKYjA-GFidABKWKhFZrdTxbQ6GzoMQASCgKBgfigRDg3yIvxgJWwqzKKE+AAYADRwACMgI2EAAqmBUFBZNgCYC4ABqOA-P44vEEikswYhZbhVYqCGWDziBgSCpEIRwCB-LF2I5C06fThpFB0ZqkgDu0DoqgAhJxAeIUrYbJwABJanVwfVQQ0moA) @example ``` @@ -110,6 +111,7 @@ type L1 = Length>; type L2 = Length<`${number}`>; //=> number ``` +[Playground Link](https://www.typescriptlang.org/play/?exactOptionalPropertyTypes=true#code/PTAEGUBcCcEsDsDmpIE8AOBTAzqA7rJABagIBmChmo2mkoA9maOg9trAEYA21AbgENuAVxyhodYdHigABmSG1ZAOgBQq2AFtW0emiygA3gElsUOEgAyVaEIC+oMtAabQAcn2YAtGRyQ3ANzqnqAAgtzcAKroWNAAxgK05giIuAC8oKbJVjZCADzRsQm0edgwKQB8FUEgaRWOipjBGNTZqVACuikA6oREAPIyGVnlOZCYttx5sgzwACSGZRaIdrLVqrX1Cty06iCgACpEsLicmEQCfLAMUqS46J2QsHHC3J3cqKDCtGSvpDJLFKgTQCeCwdCvARPWZfJ7cQiwHAAGlAiX+FDB4xoo2QnlwTHGMgkAEdhLAJDRMA9bFiLvAACbwpBqVQhSyYJDEPLgUCYAAehPpuEBSBRAGEbvBxtBeQKOULQPBMHwJgBtAC6oAyGvqaVUAEgRstrNL8uB6vzBbhtrt9fqAPyK4SaM4y-YSSBSGSyeDO12yRwMGXkShYkW4lrYA36gBcEFlVrkC3DdgW5AmhwEsG4q2jDtA7M5RDyByz3BRquUVYlwilExRSpV0HVFTzcZrdegqrcvCLbnVQVZLQLAEYtQWOYguZYGHgJsVMKUcVUasA6k6XRNmgZLAAmceFqfF2QLX2b6CrdabDeuoA) @category Type Guard @category Utilities @@ -169,6 +171,7 @@ const end = '123' as string; endsWith('abc123', end); //=> boolean ``` +[Playground Link](https://www.typescriptlang.org/play/?exactOptionalPropertyTypes=true#code/JYWwDg9gTgLgBDAnmApnA3gSQM4DkCuIKUwAxgDLAzECGANgDRw4DKMJAdgOaXVT0BfOADMoEEHADkSVAFphKbDEkBuAFBqA9JrgALGDDDYAXNq5Vd+AEYA6UuM3AOEUjQ6yuY-GEccFUKBQAE1kZRU0rOggrTRAaJWJYiCD8OnCw7E1sKFIIiAg0t1ko81yIVH4YaEyAUQ4g7AB1CxsYbDUwuDqG5phdAB4AFQA1enwUJkHupos4FAAPanrsOCVOLgA+OABeNQBIEbG0BaWG1fYnLn29gH5mbDZ13lo6Iene3S2TlGWEKHHrrd7o9Ls9+K9DnRxl9Fj8zuwAXskUDIeM5rDfgADAAk6DWlwEuKmyw+AkxgKRdwRKApe2MIno2BpyLpcCs+UKHEB9PZBRQbmu9NRxwxZw4hCsxEBdxwBCIJAoVBeQ1GUJQMNOK2pFLu7ws-Rx6GFZMmer6Gwp9OEjOZSKtNvUamE+A4pBgwAgHDmJP1mA4YHw8G+v3x3DgAB84OKQJKoExuujNed1hsABROAMwel+zNMOH07oASgw+0CMHwUC9hozgbJNjhMz6qbhxfiXR9fX6OcD8fqG3UAg0DY+qckNCspEkTEkk8L6m02y22rUw4sqYAjAAmADMABYAKwANmnB8PkjnWk0i7+ALU9g4Sm9QR2Ui328kcDboa4jtXTbHE5vlOT4XguWy8pyQA) @category Type Guard @category Utilities @@ -209,6 +212,7 @@ declare const runtimeBoolean: boolean; const eitherId = getId({asString: runtimeBoolean}); //=> number | string ``` +[Playground Link](https://www.typescriptlang.org/play/?exactOptionalPropertyTypes=true#code/JYWwDg9gTgLgBDAnmApnA3gSQM4CEIQA2KAhgHYAywMKUJhAvnAGZQQhwDkSqAtMymwxOAbgBQYgMYQyQuMAAmcALxwAjACYAzOLE80AcRQxMCgDwBBbAGUYUYGQDmcFAA8aZBdjgAjAsXIAPhUxAEgcfCJSSmpaeksbOwdHYLcPLwQoAFcUMNCAfjgrW3snF3cUT287HLyCuAADABJ0fQhmeQUGBrqALgRkFHbOvP6yLJAfWjgAHzghUsddZiyySRhgGThHY1MEkuTy9O8-KPIVFnpsFECACggwDZlsfP70EkTF-uKkpwYASgwYSgxiyUDIcHuj02snyADoPgcyoVmuhFN04P1FICPnAjCZzD9FoFxAwJNJZPBxpNaKYLjsCbd-uIAPQs5TBTRacnPeALZJ01QM0y3d6fZL9GooAGs9nBThczgSBQoSSEEgguAUuTZMgbEAoSIBMj9U7G8Ta+AoagAC1pSiFuwUosRv0c-V1+sN-miMrEbI5cGpUygs3mbqAA) @category Type Guard @category Utilities @@ -244,6 +248,7 @@ get({[symbolLiteral]: 1} as const, symbolLiteral); get({[symbolValue]: 1} as const, symbolValue); //=> number ``` +[Playground Link](https://www.typescriptlang.org/play/?exactOptionalPropertyTypes=true#code/JYWwDg9gTgLgBDAnmApnA3gSQM4GVEgBGEANgDLAwpQCGJAvnAGZQQhwDkSqAtEythgcA3AChR3NAHEUMADwB5QgCs4KAB5UAdgBNscAEooAxtB1zsBYiQA0cLQFci1AHx2A0ikRrNKXfoBrLwgmOCVlFzgAXlEASBx8IlIKKloSOU9ESI1tPQQoBxQ42IB+MJUAbUyAXWKALnsnQmoxUSYHLWMYYAgtOABzWUUVH1z9I1Moc0sk20bnKDc4TNG-PKDEEPKIgAoIBvC7DYbMgEoMOKhZByg+iAqN6rgafRl5Q+WvFzF6cVMtQRwGbWFLUOjROCJaw7DgkShgkgcU5if6A4GkABqdEKDXRJAhUNIMIAbtiUEjWoMYDt0BU8aC0tUGgBGRgvOComB2enwtLI0QAegFUUizPEVJpdKsmLJTLgrOe+k53OlJCxJEK-KFIvmzSgQA) @category Type Guard @category Utilities @@ -302,6 +307,7 @@ type J = IsLiteral; type K = IsLiteral; //=> false ``` +[Playground Link](https://www.typescriptlang.org/play/?exactOptionalPropertyTypes=true#code/JYWwDg9gTgLgBDAnmApnA3gSQM4BlgwpQCGANgL5wBmUEIcA5EqgLRUrYwMDcAUL8zQBBOAF44OfIRKkAPAEYAfHwD0K0YoRQArin6C4AITES8BImVkA7bSABGRZbzUbqZbHoHI0AYROTzGQUrJxdNGB1PAwARfzNpSztgAHNgKxhQ9U0qdyjvOABROKkLOSZvNg4uTNcI3X18gDFiwMtOKDTkmuzchtQ4AHEWhLkAAwgrABJ0ds7yUe63Ug9+ABMUAGNSYig0DYnOOGxEewhSEpkALjhtK2AAR10jk7szvgMACWHS2UEIKmep3OrVIizqeX6mG+QWOQMWOWWELQACloZZwWDIn00ABpNFyV5nFDEEKqLJLDxAA) @category Type Guard @category Utilities diff --git a/source/is-lowercase.d.ts b/source/is-lowercase.d.ts index e56d8cb2d..1df191d64 100644 --- a/source/is-lowercase.d.ts +++ b/source/is-lowercase.d.ts @@ -16,6 +16,7 @@ type B = IsLowercase<'Abc'>; type C = IsLowercase; //=> boolean ``` +[Playground Link](https://www.typescriptlang.org/play/?exactOptionalPropertyTypes=true#code/JYWwDg9gTgLgBDAnmApnA3gSQM4BkIDuKUAxgIbYoC+cAZlBCHAORKoC0tK2MzA3ACgBbNAEE4AXjg58RUhRQAeZmQBGJZgD5BAeh0TNCKAFcUQkXABCk6XkLFylZaPVbd+w7TIAbSueRoAMI2MvbyTjxQwAB2AObaAnoGcKoQEN4oZNFAA) */ export type IsLowercase = AllExtend<_IsLowercase, true>; diff --git a/source/is-never.d.ts b/source/is-never.d.ts index 31acbcb44..b46f18990 100644 --- a/source/is-never.d.ts +++ b/source/is-never.d.ts @@ -29,6 +29,7 @@ type E = IsNever; type F = IsNever; //=> false ``` +[Playground Link](https://www.typescriptlang.org/play/?exactOptionalPropertyTypes=true#code/JYWwDg9gTgLgBDAnmApnA3gSQM4DkUBuKUANHAIIB2AJgL5wBmUEIcA5EqgLQMrYxsA3AChhnNOTgBeODnxEoAHkqFiAPhEB6TVLUIoAVxSjxcAELTZeVUoCGlRBuHbdjWwBtsxscjQBhSzkbRQNKAGtKCAB3SicXPQYPLxNfOAARQOsFZRsAbQBdOJ0EpO9TAFFM+WJFCAAjACsUAGMYItdEzzLUgDEq4P4oYEoAc3aSrqA) @example ``` @@ -47,6 +48,7 @@ type IsTrueFixed = type B = IsTrueFixed; // ^? type B = false ``` +[Playground Link](https://www.typescriptlang.org/play/?exactOptionalPropertyTypes=true#code/JYWwDg9gTgLgBDAnmApnA3gSQM4DkUBuKUAvnAGZQQhwDkSqAtOStjLQNwBQXDaOAFSgBXFAB4BAPjgBeOALgoAHjBQA7ACbYEItAH4douAC4KAQwA22FNy4B6O3ADqAC3VwzcDcDZRgAI2EYYCI4AGMITWBgyMs4H3i1NjM1YLNVDTgAd2iXOAADNUJifIAaBDdFVOAoNAiomLU42uxhCxhtYDUCoqIofIA6XmQ0AEFZOEFdMV7iSW4HOCWAPQM+OHG5WageRcxyOEQIYS9I+myU+BgXdLh-FBuCYGOocqOTsJTFJTALYDDohZEB4NJkvvkcPg+vlwm4wgBrO4ocjQNDXNDeXwBIIhOqRDSNSxDdZTUQAMWAShQGgk0hkXAAkJDilBad9VJptDBdHADORLNYTPJ2eotIZ9OKhfyrDYeOsAEITUkoClUmnbeb2RwrNYjOCKuTS6xAA) @category Type Guard @category Utilities diff --git a/source/is-null.d.ts b/source/is-null.d.ts index 6994ac70f..bc51e12aa 100644 --- a/source/is-null.d.ts +++ b/source/is-null.d.ts @@ -13,6 +13,7 @@ type Example1 = NonNullFallback; type Example2 = NonNullFallback; //=? number ``` +[Playground Link](https://www.typescriptlang.org/play/?exactOptionalPropertyTypes=true#code/JYWwDg9gTgLgBDAnmApnA3gSQM4DkCuANoQL5wBmUEIcA5EqgLTkrYy0DcAUFw2rhAB2BYgDEAhsQBG4gMYBrADwAVADRwJ0ufIB8cALxwcIwir0oAHjBSCAJtgRR8aAPwbJhGQrgAuOMu5eZDQAUQtxcEIUAEYDOAFhIkJNT21FQST1NihgQQBzHW4AeiL9PWzcvJ4+ODCIsCiAJjiEkxSvJQyQKRQoLJgc-MKuEv03Lp6oIA) @category Type Guard @category Utilities diff --git a/source/is-nullable.d.ts b/source/is-nullable.d.ts index 5c78aedd8..61978ff31 100644 --- a/source/is-nullable.d.ts +++ b/source/is-nullable.d.ts @@ -21,6 +21,7 @@ type C = IsNullable; type D = IsNullable; //=> true ``` +[Playground Link](https://www.typescriptlang.org/play/?exactOptionalPropertyTypes=true#code/JYWwDg9gTgLgBDAnmApnA3gSQM4DkCuANoQIYBGhKAvnAGZQQhwDkSqAtLStjMwNwAoAWzQBBOAF44OAsXKUAPDyjAAdgHMAfIID0OiZrolC2FEJFwAQpOl4ipCiiUwVGuAB84q+9oF6DCFD4ZsLIaADCNjL28k7KauoecPiqACYotGooqb7+hrTGpuZhcAAiUXZyjs6uiZ7exEkp6Zmq2bn6hi7BQA) @category Type Guard @category Utilities diff --git a/source/is-optional-key-of.d.ts b/source/is-optional-key-of.d.ts index f8f2ff383..d892c2523 100644 --- a/source/is-optional-key-of.d.ts +++ b/source/is-optional-key-of.d.ts @@ -36,6 +36,7 @@ type T4 = IsOptionalKeyOf; type T5 = IsOptionalKeyOf; //=> boolean ``` +[Playground Link](https://www.typescriptlang.org/play/?exactOptionalPropertyTypes=true#code/JYWwDg9gTgLgBDAnmApnA3gSQM4HkwzAQB2AhgDYDSKiuAZgL5x1QQhwDkSqAtHSthgcA3AChRwYjBRQ6pAMZoAqthkZRASDIgUALjiCokgOZiN2AK5RtegzCPFT4jeQvyA1ogByFkACMZAH59Yl8AqDEGcUlpWQU0AEEAExBJdS1SHX1DEzNLa0yUYLsHJyjRbjQAFQBGOABeOBx8QhIKalo6AB4VGQAaTlcPbzCZDgA+MQB6KfrxhCgLFHFKuCqAJgamvAIiMioaeh7VKAGOGwnp2fm5clUV5GqAZi3m3baDzuP+zgu4AB9Bm5PD5-GNJqIZnM4H4IBByChSMQHqg1gAWV47Vr7DpHXpQAFwZKpYhnC4QqE3Cj3CqPNYAVkxLT27UO3XxhOJkjO+XJV2hsPhiOIQA) @category Type Guard @category Utilities diff --git a/source/is-optional.d.ts b/source/is-optional.d.ts index b16c62ee4..e9d39f190 100644 --- a/source/is-optional.d.ts +++ b/source/is-optional.d.ts @@ -19,6 +19,7 @@ type C = IsOptional; type D = IsOptional; //=> true ``` +[Playground Link](https://www.typescriptlang.org/play/?exactOptionalPropertyTypes=true#code/JYWwDg9gTgLgBDAnmApnA3gSQM4HkwzAQB2AhgDYC+cAZlBCHAORKoC0NK2MTA3AFD9WaAIJwAvHBz5CJCgB5uUYMQDmAPgEB6LePW0K2FIOFwAQhKl4CRMuUUxlauAB84AV2IATFDRUovTX4dPQQod2MhZDQAYUtpGzl7JRVVVzhid3JyIJD9GkNI0wAReOtZOwcnNLdM7PTPHz9iANzdfUcIoA) @category Type Guard @category Utilities diff --git a/source/is-readonly-key-of.d.ts b/source/is-readonly-key-of.d.ts index 398a7a491..9c169a1b0 100644 --- a/source/is-readonly-key-of.d.ts +++ b/source/is-readonly-key-of.d.ts @@ -37,6 +37,7 @@ type T4 = IsReadonlyKeyOf; type T5 = IsReadonlyKeyOf; //=> boolean ``` +[Playground Link](https://www.typescriptlang.org/play/?exactOptionalPropertyTypes=true#code/JYWwDg9gTgLgBDAnmApnA3gSQM4CUUCGAJhAHYA2iA0iogPIBmAvnA1BCHAORKoC0DFNhhcA3AChxwUjBRQGBAMZoAqtjkZxASFIEQKAFxxhUaQHMJW7AFcou-UZPmJ2qIRIVEcYESOlrIABGchJMktKy8kpoAIJEINKaOnqGxjCmpBbaPo7pzuJh4rxoACoAjHAAvHA4+MRklDT0DAA8anIANNw+XAB8EgD0A5W9CFDWKJLFcCUATFU1eO4N1LSMbepQXVz2KH2Dw6MK5OpTyKUAzAu1y55N6+1b3LtccAA+3UT74kMjcIEQCDkQikM6oGYAFmuS3qdzWrUe7zgcQSpG2L36P0OrAIJ0mRXOMwArNC6h5GvCNhoPijpNsepjfqMAUCQUA) @category Type Guard @category Utilities diff --git a/source/is-required-key-of.d.ts b/source/is-required-key-of.d.ts index 6d8fbdc89..54e0d0d8b 100644 --- a/source/is-required-key-of.d.ts +++ b/source/is-required-key-of.d.ts @@ -38,6 +38,7 @@ type T4 = IsRequiredKeyOf; type T5 = IsRequiredKeyOf; //=> boolean ``` +[Playground Link](https://www.typescriptlang.org/play/?exactOptionalPropertyTypes=true#code/JYWwDg9gTgLgBDAnmApnA3gSQM4CUUCOArsFCgCYDSKiA8gGYC+c9UEIcA5EqgLT0psMTgG4AUGOAA7GCij0AhgGM0AVWxyMYgJBSFIFAC44QqNIDm47diJQ9B46YvidAGyJKA1ogByREABGcgD8xlL+QVDijBLSsvLKaACC5CDSWrr6RiYwZlKWOjZ2WaE5eQUxYjxoACoAjHAAvHA4+MSkFNR09AA86nIANFz2KJwAfOIA9JONYwhQRCgS1XA1AExNLXiEJGRUNAx9GlBDnO5evhFy41Mzc4quGsvItQDMm607HfvdR4PDWU4cAAPlxzt4-IFrhMxNNZnAAhAIK4UAopM9UKsACwfbbtPZdQ79KAguApNJSU4jG6wu7zRYY2oAVlxbV2nQOvWJpPJ0lORWpMLhc0RyNRUiAA) @category Type Guard @category Utilities diff --git a/source/is-tuple.d.ts b/source/is-tuple.d.ts index 6b81a47d8..b2984eb9d 100644 --- a/source/is-tuple.d.ts +++ b/source/is-tuple.d.ts @@ -26,6 +26,7 @@ export type IsTupleOptions = { type Example2 = IsTuple<[number, ...number[]], {fixedLengthOnly: false}>; //=> true ``` + [Playground Link](https://www.typescriptlang.org/play/?exactOptionalPropertyTypes=true#code/JYWwDg9gTgLgBDAnmApnA3gSQM4BUCuYANigL5wBmUEIcA5EqgLQUrYx0DcAUN42gFEAHgENwJAIxwAvHBwFiKADwBtAHb4QAIxRQANHAB0xjdt0qAuhYPoKwISgAmAGRRqA5jAAWAeTVFEAC4EKHwyAD4eAHoo6XDKESJsFF5+OGExRQAmGTk8QhJVUx19IxNNEstrDDsHFzdPX38ghKSI6Nj4mFCUIA) */ fixedLengthOnly?: boolean; }; @@ -61,6 +62,7 @@ type RestItemsNotAllowed = IsTuple<[1, 2, ...number[]]>; type RestItemsAllowed = IsTuple<[1, 2, ...number[]], {fixedLengthOnly: false}>; //=> true ``` +[Playground Link](https://www.typescriptlang.org/play/?exactOptionalPropertyTypes=true#code/JYWwDg9gTgLgBDAnmApnA3gSQM4BUCuYANigL5wBmUEIcA5EqgLQUrYx0DcAUN42gWJoAvHByCSAHgDaARgA0cAEyKAzAF0AfDwD0O4ZoRR8KXvzgA5CDAkixeQlIB2+EACMUUaVt37DFAEMibFM+ZAFHFAB1YBgACwB5MBhgCCcgzBgUEGw4UXFImVkAfkUlYp9uPQMjEzNwuAAlNhhM7OwrGABBIiIIAHcUABM8+1sissUAOhmXd09vSur-IJD61CaWtpyevsGR-IchCeVp2dcPL3V1RXQKYAAPYYAZFCcAc3iEpyJEAC5KKsyNoqn5aiggA) @see {@link IsTupleOptions} diff --git a/source/is-undefined.d.ts b/source/is-undefined.d.ts index 66ac81d39..53d5f742b 100644 --- a/source/is-undefined.d.ts +++ b/source/is-undefined.d.ts @@ -13,6 +13,7 @@ type Example1 = UndefinedFallback; type Example2 = UndefinedFallback; //=> number ``` +[Playground Link](https://www.typescriptlang.org/play/?exactOptionalPropertyTypes=true#code/JYWwDg9gTgLgBDAnmApnA3gSQM4FUB2AJigGbD4qEC+cJUEIcA5EqgLQkrYxMDcAUP1ZoCxMhUIAxAIYAbWQCNpAYwDWAHgAqAGjgz5StQD44AXjg5RpcpS0mUADxgoi2BFACuaAPx65ilVU4AC44TQEhZDQAUQdpcFkUAEYzOCtxSn0AtXUPImsJXW4ocgBzIwEAekrTE2KywWE4WPiwRIAmVPSbKX9DDXwPEAUUKCKYEvxyqpqTQeHRoA) @category Type Guard @category Utilities diff --git a/source/is-union.d.ts b/source/is-union.d.ts index 06ca80903..a1ebb5fa2 100644 --- a/source/is-union.d.ts +++ b/source/is-union.d.ts @@ -13,6 +13,7 @@ type A = IsUnion; type B = IsUnion; //=> false ``` +[Playground Link](https://www.typescriptlang.org/play/?exactOptionalPropertyTypes=true#code/JYWwDg9gTgLgBDAnmApnA3gSQM4FUB2wE+AvnAGZQQhwDkSqAtOStjLQNwBQXDaAgnAC8cHASL4APGyjB8AczgAfOPgCuIAEYooAPm4B6A0N0IoalDz5wAQsNF5CxaTFkL9XIyYoBDADbYKEA) */ export type IsUnion = InternalIsUnion; diff --git a/source/is-unknown.d.ts b/source/is-unknown.d.ts index 48ce057ff..5becf1460 100644 --- a/source/is-unknown.d.ts +++ b/source/is-unknown.d.ts @@ -29,6 +29,7 @@ type E = IsUnknown; type F = IsUnknown; //=> false ``` +[Playground Link](https://www.typescriptlang.org/play/?exactOptionalPropertyTypes=true#code/JYWwDg9gTgLgBDAnmApnA3gSQM4FUB2A1vhAO74C+cAZlBCHAORKoC01K2MjA3AFB8WaAIJwAvHBwFiZfAB4ArkRLkAfPwD0GsarhKZ5AULgAhcZLzLZcgIb5E6vlp00bAG2wojyNAGFzUlbkcvgoAG4oUI7OutTunt6ocAAiAZYG8voq+ADaALrR2rHxXoI+cACiadLZchAARgBWKADGMIUucR6lxgBi1UHyXFDA+ADmHcXdQA) @category Utilities */ diff --git a/source/is-uppercase.d.ts b/source/is-uppercase.d.ts index e6055d7f8..66139e5f5 100644 --- a/source/is-uppercase.d.ts +++ b/source/is-uppercase.d.ts @@ -16,6 +16,7 @@ type B = IsUppercase<'Abc'>; type C = IsUppercase; //=> boolean ``` +[Playground Link](https://www.typescriptlang.org/play/?exactOptionalPropertyTypes=true#code/JYWwDg9gTgLgBDAnmApnA3gSQM4FUypQDGAhtigL5wBmUEIcA5EqgLTUrYyMDcAUHxZoAgnAC8cHPkKlyAHkbCAQgGFGAPn4B6LWPUIoAVxQChcJeMl4CKYmRQLhAIyIbtu-dRIAbcqeRoKpZSNnbyXFDAAHYA5pp8OnpwThAQ3igkUUA) */ export type IsUppercase = AllExtend<_IsUppercase, true>; diff --git a/source/is-writable-key-of.d.ts b/source/is-writable-key-of.d.ts index e48f464f4..15542d10d 100644 --- a/source/is-writable-key-of.d.ts +++ b/source/is-writable-key-of.d.ts @@ -38,6 +38,7 @@ type T4 = IsWritableKeyOf; type T5 = IsWritableKeyOf; //=> boolean ``` +[Playground Link](https://www.typescriptlang.org/play/?exactOptionalPropertyTypes=true#code/JYWwDg9gTgLgBDAnmApnA3gSQM4HUrAwCGARgDYoDSKiA8gGYC+c9UEIcA5EqgLT0psMTgG4AUGOAA7GCij0iAYzQBVbHIxiAkFKIgUALjhCCUgObit2AK5Rd+oyekWJWqCiIATCFLKI4wJ5GUtYgJHLijBLSsvJKaACCniDSmjp6hsYwpi5agY7ZzpESPGgAKgCMcAC8cDj4hKQU1HT0ADxqcgA0XPYonAB84gD0w9UDCFDWKCXI5QBMNXV4BMTkVDQMHepQPZyBgyNjEwpk6rOocGUAzEv1q00brdvdvRmccAA+XAdDYqPjOAkCAQChEKQXcoAFjuK0a6xaW06UC+cCSKSkez6h3+x0m00hVwArLCGmtmpt2sjUejpHtfkdAcDQR4pEA) @category Type Guard @category Utilities diff --git a/source/iterable-element.d.ts b/source/iterable-element.d.ts index 81de3766a..e37b858e7 100644 --- a/source/iterable-element.d.ts +++ b/source/iterable-element.d.ts @@ -18,6 +18,7 @@ function * iAmGenerator() { type MeNumber = IterableElement> ``` +[Playground Link](https://www.typescriptlang.org/play/?exactOptionalPropertyTypes=true#code/JYWwDg9gTgLgBDAnmApnA3gSRiqBDAIwBsUBREkFAOxgF84AzKCEOAciVQFoGUBnGGwDcAKBEMArlQDGMYBCpwAVHGABBEAHFquPDGgAKAJQYRASETAURACZwAjKItXbcAEyjaYzmgCyKADkJEAJcOABeOGxdYjIKahgAHgAlFBgJKCoAFWQURJ8IBlUNbSpdfSgAPkqgA) And here is an example with an async generator: @@ -32,6 +33,7 @@ async function * iAmGeneratorAsync() { type MeStringOrBoolean = IterableElement> ``` +[Playground Link](https://www.typescriptlang.org/play/?exactOptionalPropertyTypes=true#code/JYWwDg9gTgLgBDAnmApnA3gSRiqBDAIwBsUBREkFAOxgF84AzKCEOAciVQFoGUBnGGwDcAKBF4+iKgGNGAVxkxgEKnABUcYAEEQAcWq48MaFskyAFAEoMIgJCJgKIgBN2AC2DC7Dp65hQ5FFFaMU40AFkUAGV-YCoAcwB5KAAhCAgSPFUAXjhsQ2IyCmoYAB4AJRQYOSgqABVkFFKwiAZNHX0qQ2MoUylpAD4BoA) Many types in JavaScript/TypeScript are iterables. This type works on all types that implement those interfaces. @@ -43,6 +45,7 @@ import type {IterableElement} from 'type-fest'; type MeString = IterableElement ``` +[Playground Link](https://www.typescriptlang.org/play/?exactOptionalPropertyTypes=true#code/JYWwDg9gTgLgBDAnmApnA3gSRiqBDAIwBsUBREkFAOxgF84AzKCEOAciVQFoGUBnGGwDcAKBGc0AWRQBlGFGBUA5nAC8cbLkIlyKSjQA8AhcoDaAXQB8QA) @example ``` @@ -53,6 +56,7 @@ const fruits = new Set(['🍎', '🍌', '🍉'] as const); type Fruit = IterableElement; //=> '🍎' | '🍌' | '🍉' ``` +[Playground Link](https://www.typescriptlang.org/play/?exactOptionalPropertyTypes=true#code/JYWwDg9gTgLgBDAnmApnA3gSRiqBDAIwBsUBREkFAOxgF84AzKCEOAciVQFoGUBnGGwDcAKBEBjCFQGMoAV2Aw+cALxwqKAO5wAyihgAKANptAPBuA5fbYAadqcAy+9duBJfbYBdOHmWTpMAJSiRTjQAMXlFVThsXEISchRKGgAeIIgGWQUlAD5RAHoclUzbSzgAH1sHUuc2IA) @category Iterable */ diff --git a/source/join.d.ts b/source/join.d.ts index ab2c4fc03..99a71db19 100644 --- a/source/join.d.ts +++ b/source/join.d.ts @@ -53,6 +53,7 @@ const path8 = ['suffix'].join('.') as Join<[...string[], 'suffix'], '.'>; const path9 = ['hello', 'world'].join('.') as Join<['hello' | undefined, 'world' | null], '.'>; //=> '.' | '.world' | 'hello.' | 'hello.world' ``` +[Playground Link](https://www.typescriptlang.org/play/?exactOptionalPropertyTypes=true#code/JYWwDg9gTgLgBDAnmApnA3gKQsAdgXzgDMoIQ4ByJVAWiJQGcYKBuAKDYHpO4BZYAB4oAJnAAUTKHgDmDOADI4uAK4gARiigMAlHGAwUIBmwDGEXEzhgAhjAAWARjgBeOAG0KRCBAoAaOAAM-hRq1gBeFAC6AHQAVji4YhTRFLrWcth4ADweXj7+QZShEZHBKQB87NzO5ZR50QHRxRQc3HAA8rgANohwkjJ6Bkam5pY29gBMLu6e3n5F1lDzIeFRcQlJKWkZCTmz+QtLwc2llBVVnDV13k2LtxGtPJ09SqoaUIOGxmYW8ON2AGZpm4HP4Jv4ATF4nhNqk4Ok4JlcDlQXBwXBIWUKJUuJdahQHNEJtEAS1cR1ur01MBpHh4PoviNflZbHYACzAhy4MHcjG4KEbZJwhFIlG8ia8gH8rE46r4wnE0mPCkvNTeLooay4T7DH5jVkAVmBMCgyhQ-iI1i6DHNCFNKAFMKF20RuzcJrNFqtNv8HodMouVyo9uilutKGifrJbQAwuYYNY8HIVF0usAGHYdd9Rn9WQA2YH7ebKXDCFBEPAiY6rfwprrBASIErrJ1beE7bK5Ob+Etliu4KsLCK15SphtNqIB3FB+r3aLRRsPckABUWMGAVoQyjAGr6dmsqDkYigjFzUGs5C66Rg2iZ+vsAHZC2ATxWBGtoYlne3XZ2KC-y0EeZ52ifpcGkNxIlOIVZTxOAAAMALfaJ0DA6R8Hg5VV1gDcui3Hc0AzA9GHEE99XPcgKy0G871zewAA5CwYZQiDfD9BTbEU3RAtDIOCZjWKA6DzmnWp4IAElQk0ZHwUCWLfTDyQAFW3DU5AZIw4AAd30TM63TTMS2AUZaJZewAE5CzsFBUwOCgtOgLphHY1thQ7ZEPGs2yKDgAAfOBe0AgdhGCByoCcnz-LrYTsUDfEUj8s4woixKKC8roIAS-y0psjLomS5ygA) @category Array @category Template literal diff --git a/source/jsonifiable.d.ts b/source/jsonifiable.d.ts index da6a9d550..e2f64df8c 100644 --- a/source/jsonifiable.d.ts +++ b/source/jsonifiable.d.ts @@ -31,6 +31,7 @@ const good: Jsonifiable = { JSON.stringify(good); //=> {"number": 3, "date": "2022-10-17T22:22:35.920Z"} ``` +[Playground Link](https://www.typescriptlang.org/play/?exactOptionalPropertyTypes=true#code/JYWwDg9gTgLgBDAnmApnA3gKQM4QHbABmwAhgEYA2KAvnIVBCHAORKoC0hK2MzA3ACgBAemFwAAjGzsUAD1QBjGDKgMoAhfh5wUq6AC44OfEVKU0AXgwC4tuCBJhDeFAHc4AWUcAKANq-mEmYAGjgARgBdCIBKYIFqQQFMAGUAeQA5ADoeKGA8AHMiRG9dNWjBUQsAPgwAIgcwWsN0amohTTxtfIgIABNDYwJicio4K3QbOzwAVxAyXUMAZji7OF6SGBRnNzgAEQ2Ub1jJ2xBgbGw8-MNpvF6UYhdeuLaktKycq6Lvbr7ykWE1TqMzmuiacGWcFq6024NqACYAAzw+HsMKItEAdgAKij9HjFgBWTIATiRAC1atQgA) @category JSON */ diff --git a/source/jsonify.d.ts b/source/jsonify.d.ts index db3a49635..4c113c56c 100644 --- a/source/jsonify.d.ts +++ b/source/jsonify.d.ts @@ -73,6 +73,7 @@ fixedFn(point); // Good: point is assignable. Jsonify transforms Geometry int // @ts-expect-error fixedFn(new Date()); // Error: As expected, Date is not assignable. Jsonify cannot transform Date into a value assignable to JsonValue ``` +[Playground Link](https://www.typescriptlang.org/play/?exactOptionalPropertyTypes=true#code/JYWwDg9gTgLgBDAnmApnA3gKQM4QHbABmiANHDvgGoCGANgK4oC+chUEIcA5EqgLSEU2GFwDcAKHHA8MFFELUAxmgDiKDihhREGcQEheKAFzcAChGki4AHzMRaiAOb4x+xRGgATadVnYTANp49CAARnJkwWFyALoSTJLueMJwkJYmahpaOgC8ugbIxnaWXCRuHlDeeL5CgQCMZHUx4kwS4p4oirTUUGiE9HiKMMD4qeyhtCggAGJ4ABSevtQmFHg0DCgAlCYAbhaebQD0h3AAAjDYfCgAHqhDV1DsUOJg45Mz82kym6Jwx3AAUUe0BMhjgmRAmm0cGA2DgeAg8Go2GwwEc1QmaBgEFSPWokNkUDgEEICEK5FwazojDg4UU1Ho2DQwHgsLg1DwMJkcgUykkHS6PT6AyGI05hGA1xQnlmAB4ACoAPgWSxWlKIiAViu2cD2wAOkglUplnws31+-xUHk8Ji+rLhyNR6OomIAdBT8BqtQgoBzsIRoCA4RCoTpLDidtS0I60RjJggcat1oxJP9zpcbncYA8nuIjdLZnM8CgAO5wAAiNTmmx+fxOQKeJgAgnDM51ZJ4yJXZDC4QikSjYy7Ju7Vl6lXB6Xh+z6-QGoJxu8yZDjqLqo+zB87MQmPVSNkA) Non-JSON values such as `Date` implement `.toJSON()`, so they can be transformed to a value assignable to `JsonValue`: @@ -87,6 +88,7 @@ const time = { // `Jsonify` is equivalent to `{timeValue: string}` const timeJson = JSON.parse(JSON.stringify(time)) as Jsonify; ``` +[Playground Link](https://www.typescriptlang.org/play/?exactOptionalPropertyTypes=true#code/JYWwDg9gTgLgBDAnmApnA3gKQM4QHbABmiAvnIVBCHAORKoC0hK2MNA3AFCcDG+rCUGgC8GTgEgYQgGoBDADYBXFAC44eFAHc4AEVkwUACgCUnEl04B6S3AAGOfEUQAeeigiFBIFAD5bcYGw4FABHRWAANwUUPHgYCDt0KW85JVU4VihgPABzEltefjihBzw4UUwAZQB5ADkAOjBZKGwjKrr6zOycp0NklGNjOFkg0qdXZHdPfp92IA) @link https://github.com/Microsoft/TypeScript/issues/1897#issuecomment-710744173 diff --git a/source/kebab-case.d.ts b/source/kebab-case.d.ts index da061deb8..bde6b313a 100644 --- a/source/kebab-case.d.ts +++ b/source/kebab-case.d.ts @@ -34,6 +34,7 @@ const rawCliOptions: KebabCasedProperties = { foo: 123 }; ``` +[Playground Link](https://www.typescriptlang.org/play/?exactOptionalPropertyTypes=true#code/JYWwDg9gTgLgBDAnmApnA3gaRQIwIY4DCeAzigL5wBmUEIcA5EqgLRUokwMDcAULwHoBcAMqgwAGxT8AxhAB2nOCTooAanijACUgFxxs+IqRQAeBlQgQAQpoYA+OAF5GliC3xQevOYvgqQdU1tHCkAOQgRSWAYAHl5MIBXEBwUKBJ9QwJiMnMwACYwMJQYAHdoAGsGABoMEmi4hOTU9P0qPAkyckcXBgKwFnkS8qgqvkFhAEEAEwA3PHkZFGn+ZjQs4zJpgAVaVFhgDlMAFR6MXgBIAG1MOGB5OAqURAgqOGO4UgNcbJNTTHsAF19McboDeORxvcYGl2ks4IQJMBYmAYMAFCRzhdplBEAAlRLyfQ4KxSBZ8C73GQSRLTFAAMWAemUMC08gA5hS3Pp5M00nxyLIMfAoHhSojkaj0YpMj9NstdhB9mijhKUWiMWd0JcGDjECwoISGPpWYkUNUdVSaXS2EyUMbGJ4AHQAKxINUu3LgAEZ8gBmCHcIA) @category Change case @category Template literal diff --git a/source/kebab-cased-properties-deep.d.ts b/source/kebab-cased-properties-deep.d.ts index f377d5c74..def055590 100644 --- a/source/kebab-cased-properties-deep.d.ts +++ b/source/kebab-cased-properties-deep.d.ts @@ -52,6 +52,7 @@ const splitOnNumbers: KebabCasedPropertiesDeep<{line1: { line2: [{ line3: string }, }; ``` +[Playground Link](https://www.typescriptlang.org/play/?exactOptionalPropertyTypes=true#code/JYWwDg9gTgLgBDAnmApnA3gaRQIwIY4DCeAzigCYAKUEqswKJAIiimAL5wBmNIcA5ElQBaLoxj8A3AChpwAHYwUULngDGaAKpkoGaQEgArjoCS5AFxx5hkDmUyjOgHJ4QKSyRhQFAcxntZBSUVdS0dAHVgGAALADFvFHlyEj1HZRN5LghLbXsDY2V4hiSSHJ0AbQBdf1k1CHlPOChGQwAbGEtsfCJSCmpaZRgGZlYwAB5cqEiYosTkgD44AF5U-gKoYQUs-kt0A301nU3yHbgARgAafcPlYXlXFFP+ABUIEH4r-XZPm42eYuSp3K+z2+jBv2OpwATJ9wes7g8ngApZRQRAffbfEH7A7w4AnSwAZlhuKO9zcTwAymBgABrR6wrH6SpXdgyaR1BrwEhgVpRADy8icNjsUFKcC6BGIZCoNDoQ0YLDYY3QfPkKDOuzgapQUMs5XQ2oUKEJHi8vjg7Eqlu+GB5fJgguFtmU4q8hhQ7EWK1B-B1wjOp1BB39UKBOOD4P9hKenm88h8GLBX1hLIMWLZQA) @category Change case @category Template literal diff --git a/source/kebab-cased-properties.d.ts b/source/kebab-cased-properties.d.ts index 114f8a042..d54ffbdfa 100644 --- a/source/kebab-cased-properties.d.ts +++ b/source/kebab-cased-properties.d.ts @@ -29,6 +29,7 @@ const splitOnNumbers: KebabCasedProperties<{line1: string}, {splitOnNumbers: tru 'line-1': 'string', }; ``` +[Playground Link](https://www.typescriptlang.org/play/?exactOptionalPropertyTypes=true#code/JYWwDg9gTgLgBDAnmApnA3gaRQIwIY4DCeAzigCYAKUEqswKJAvnAGY0hwDkSqAtK0YwuAbgBQY4ADsYKKKzwBjNAFUyUDGICQAV3UBJcgC44UnSBxzxu9QDk8IFCZIwo0gObimExRCku4KEYdABsYE2x8IlIKalo5GAYSAB41OQA+OABeTS0uPTk+YHIuEwBGABptfPU+KQcUUu4AFQgQLiqmcTFff3gSMBDgGAB5KVtzSygSCNwCYjIqGjpExmT0IakUMudXDyYKjAGh0fHJuRmEKB0UJkyc9GrNlD4ypq4XNyl3DrEuoA) @category Change case @category Template literal diff --git a/source/key-as-string.d.ts b/source/key-as-string.d.ts index af7a87708..ab2a65db4 100644 --- a/source/key-as-string.d.ts +++ b/source/key-as-string.d.ts @@ -19,6 +19,7 @@ type Foo = { type StringKeysOfFoo = KeyAsString; //=> '1' | 'stringKey' ``` +[Playground Link](https://www.typescriptlang.org/play/?exactOptionalPropertyTypes=true#code/JYWwDg9gTgLgBDAnmApnA3gaRYgggZwGUYpgA7AcwF84AzKCEOAciVQFpaV8ZmBuAFAC2aAGIQIcALwYBASACMALjhkAriABGKKILk9SlbIhUHyFQVUHDkaYoYrH8AeVrjJM4wXvmAPO4A+QQB6YKkAlgVmOAAfFjMjHGYgA) @category Object */ diff --git a/source/keys-of-union.d.ts b/source/keys-of-union.d.ts index 17ce94be3..e312bb030 100644 --- a/source/keys-of-union.d.ts +++ b/source/keys-of-union.d.ts @@ -34,6 +34,7 @@ type CommonKeys = keyof Union; type AllKeys = KeysOfUnion; //=> 'common' | 'a' | 'b' | 'c' ``` +[Playground Link](https://www.typescriptlang.org/play/?exactOptionalPropertyTypes=true#code/JYWwDg9gTgLgBDAnmApnA3gaRYgzgeQDMBVAO2AlIF85CoIQ4ByJVAWkJVxiYG4AofqzQBBOAF4M-AJABjBiEoAuONyjBSAcwHSAhitIBXEACMUUAVQFDkaAEISpchctUx1WnSZVqN2-laCwnAAwo7oMvIgiqQ+7n46siomEBAANii6pJbWwWQUpI5iAD5wDqUhubahLqTYeI4A1jgQhHD5lAIA9F3iAHzMUTFMQdUiaWn1uI5TRB2kADzzfd29A0xDlExwpUy627smB4NMQA) @category Object */ diff --git a/source/last-array-element.d.ts b/source/last-array-element.d.ts index a27e5eaa0..45b883339 100644 --- a/source/last-array-element.d.ts +++ b/source/last-array-element.d.ts @@ -15,6 +15,7 @@ const last1 = lastOf(['foo', 'bar']); const last2 = lastOf([true, false, 'baz', 10]); //=> 10 ``` +[Playground Link](https://www.typescriptlang.org/play/?exactOptionalPropertyTypes=true#code/JYWwDg9gTgLgBDAnmApnA3gGQIYGcYCCUU2iAogDYogoB2MAvnAGZQQhwDkSqAtMynycA3AChRAExQBjCtihpmAV1rSYwCLThz8AeWYAeaZvxwAanBQAPGHQm44C7BM0VEcbLUQBtALoA+AAp5EkQALnMASgicfCJQymo6GAMzfzFRY1pTHRgARjgAXm08GH1A705mCAhOABouACN5Tl9IsQB6DsL-JpbxLJzSgCYikr1mCpgoJRQG5mwKXDm+gC96uDyABjbO7t7toA) @category Array @category Template literal diff --git a/source/less-than-or-equal.d.ts b/source/less-than-or-equal.d.ts index e96aee9c9..84971e776 100644 --- a/source/less-than-or-equal.d.ts +++ b/source/less-than-or-equal.d.ts @@ -16,6 +16,7 @@ type B = LessThanOrEqual<1, 1>; type C = LessThanOrEqual<1, 5>; //=> true ``` +[Playground Link](https://www.typescriptlang.org/play/?exactOptionalPropertyTypes=true#code/JYWwDg9gTgLgBDAnmApnA3gGRQZxwFQAsBDAOwHkoBRARwFdiAbAXzgDMoIQ4ByJVALRtcMHgG4AUBP5oAgnAC8cbHiJlKtBowA8ARgA0cAQFYAfJID0FhafZMcKKTLgAhRctwESFavSZ7DXXMJKxsEKDpHaWQ0AGF3FS91Xy0AuDNLa1sYCJQgA) */ export type LessThanOrEqual = number extends A | B ? never diff --git a/source/less-than.d.ts b/source/less-than.d.ts index 03ce7098e..190520e82 100644 --- a/source/less-than.d.ts +++ b/source/less-than.d.ts @@ -16,6 +16,7 @@ type B = LessThan<1, 1>; type C = LessThan<1, 5>; //=> true ``` +[Playground Link](https://www.typescriptlang.org/play/?exactOptionalPropertyTypes=true#code/JYWwDg9gTgLgBDAnmApnA3gGRQZxwFQAsBDAOwF84AzKCEOAciVQForcYGBuAKB+bQBBOAF442PETIAeAIwAaOCwCsAPl4B6DSNXViAGxwo+AuACFR43ARKk5i2ep5adew8f7I0AYUsSbMgpwapraujBQAK4oQA) */ export type LessThan = number extends A | B ? never diff --git a/source/literal-to-primitive-deep.d.ts b/source/literal-to-primitive-deep.d.ts index 9f4e0281d..a5e1968bb 100644 --- a/source/literal-to-primitive-deep.d.ts +++ b/source/literal-to-primitive-deep.d.ts @@ -56,6 +56,7 @@ updateConfigFixed({ apiUrl: 'https://api.myapp.com/v2', }); ``` +[Playground Link](https://www.typescriptlang.org/play/?exactOptionalPropertyTypes=true#code/JYWwDg9gTgLgBDAnmApnA3gGWDFUCGANgCoQAKUoOwAbigCIopgC+cAZlBCHAORKoAtOxQBnGLwDcAKGkBjCADtxcBYvbAA5nAC8GaQEh8YMADl8IFAC4+AWUQBBE7wA0hulFHAlN3gEYAOgAGYNdDEHwADwAlFBhKMRsAZjcDFEV8ACNCFEwITU1gRU0beIBXFFTjYABVKEJfAAsYGDBRKwB6DuqAkERjMACFEA6aPzC2fFFVJXEZaQATFDlCfCg0djLFORhvRTgysAX8XABhJQ1NAApFFAB3c-UtUuQUCHYZp80AShsaCGAC3mh2OZwuWiu6EMXTgAAEYKJBChIqgdkioFwoIYBuZLL57DUjicUAsnGAwgYYQBRDHQGzEV58ABEBKJuFJJiZvDgwGmigg8CmXk0GWyaBgEAQjN4LMcnN4AVklI6cIRSJRyxg6Mx7jwXh8fAATMFQqlqbSoPTpUzjSEglyeXyBXAhVpRTkEJKBGgZYE7VzFdCVfDEcjUVq8DqDBEYnEEu04H4zSqaZirag+ONHXB+YLRML3eKvdKkgqlTCQ+rw9roIZ0lkcnkCkUShwiKJKkG4Km6XAGRneOx2yhubyc87XSKG0WpQPyiPA8rVaGNWjI7WjGBavUmi02p1ulvev0TENuKNDRTzWm+9bmq12l0en0BmeRjRDQ6x7mXfm3dPPVnH0mXvfcnyPF9T2GUY-ADaQWG+eYlhWNYNi2HY9gONkUEeS4ADFgEiEkbnuXDnjgbBcAIEhyEoEBqDoRhmAAHm9d5PkuAA+X44H+QFgWwsjNAIoiFkhbETFxaw7EQQlQRJMkKQ8fVFF8W1TXCKJYniYBEkTVJ6zFJtCmKGwh0IDsqi3OoGj4UDH0PYBj1faCPwmRCgA) @category Type @category Object diff --git a/source/literal-to-primitive.d.ts b/source/literal-to-primitive.d.ts index d5d9c8097..6a5d945c0 100644 --- a/source/literal-to-primitive.d.ts +++ b/source/literal-to-primitive.d.ts @@ -16,6 +16,7 @@ plus('a', 'b'); // string plus(1, 2); // number plus(1n, 2n); // bigint ``` +[Playground Link](https://www.typescriptlang.org/play/?exactOptionalPropertyTypes=true#code/JYWwDg9gTgLgBDAnmApnA3gGWDFUCGANgCoQAKUoOwAbigL5wBmUEIcA5EqgLRMoBnGBwDcAKDEB6SXAByEOBDpRCEfABMBcAHYoU6-QgUBzFPBgALNAGNoUFNfj2YAVyjaEyFGKYvtj4AgPMEIXAQAeYjgUAA9cbU0dFxAAIzw4AB84FOBjYG14LKFKbWMAPgAKGIAuOGIAGjhEWuIASlrsXAISckoQajpIsowxAEhnNw8YuABqOArEOHwtfG1EVvF6CRCwio58DkaOFI4NuGk4YvzjMR2BCoBGRoAmM4vtZLSoW9D7h+0Xto3jIcnkCkA) @category Type */ diff --git a/source/literal-union.d.ts b/source/literal-union.d.ts index fd7919685..99db97e96 100644 --- a/source/literal-union.d.ts +++ b/source/literal-union.d.ts @@ -28,6 +28,7 @@ type Pet2 = LiteralUnion<'dog' | 'cat', string>; const petWithAutoComplete: Pet2 = ''; // You **will** get auto-completion for `dog` and `cat` literals. ``` +[Playground Link](https://www.typescriptlang.org/play/?exactOptionalPropertyTypes=true#code/JYWwDg9gTgLgBDAnmApnA3gGWDFUCGANgKoB2wEpAvnAGZQQhwDkSqAtLSgM4zMDcAKEEB6EXABCKWtBTC2aAAop4AXhYATCAHNmcAD4sAxvj4G4vKMFLahgo5V5xUMAOo4AFhACuMAIK+EA7ghCooAFxwymosAqLiAMow+LAIyNbacNZwiD5QcAAqyCgJRlZgMOwopPgARqEacACSACIAogB08XAAmj5wAFQDAO7AhIRwpBAwQ3DaKnD4gezBYKEwFKR00HAABlrau4ukjbsmMEeEOHhE3F3dfrS4UPLFUSoATHDq2M9EZJsADzMA56QzMc7MAA0FhgVhsAD47A5SE4XO4YB4AjAIABhRhrMKRaJfdTMOJiXr9IajcazebwJY4lYE9abbb5fY6I74E57c6Xa4EQh3IA) @category Type */ diff --git a/source/merge-deep.d.ts b/source/merge-deep.d.ts index fff8f13b0..dd2758c4d 100644 --- a/source/merge-deep.d.ts +++ b/source/merge-deep.d.ts @@ -420,6 +420,7 @@ type FooBar2 = MergeDeep; // a: {b: number; c: boolean; d: (number | boolean)[]}; // } ``` +[Playground Link](https://www.typescriptlang.org/play/?exactOptionalPropertyTypes=true#code/JYWwDg9gTgLgBDAnmApnA3gWRVA5igERRTAF84AzKCEOAciVQFoKUBnGOgbgCgfG0AMQgQ4AXgw8AkABtgrAFxwAdgFcQAIxy8pwGChBslHKMGW4A2gF0dAQyXoNxmKfNc4AYyUaRMlLeV3ABMlNU0ca1JeKL4zfSgKWw80ACFbKEkpZVsQFGdXXB09AyMVdS0oazsHJzLwqGDvX39lSOi+AThhCDSoAEZxOGw8QmIwAB5ugBo4XoA+XgB6RclluFl5PLqKpZWsnK2TM0KeNd19Q1DyiJtTvfsMWrCdzyaIPwDGuB93lra7uCkDrIIQiXoAJkGw3wRBIkxEM16M3Q6SgtkQ0JQmAgQS2dDYYCg-iCdFICwB6ABG0U220VOyuXyx1262KlzgAAojuY4AAfWlQACUVSpD0cV3q7i832anzgIU5zxwfJlvwCwqsMTWpCAA) @example ``` @@ -437,6 +438,7 @@ type TupleArrayMerge = MergeDeep<[1, 2, 3], string[]>; // => (string | 1 | 2 | 3 // Merge a tuple into an array type ArrayTupleMerge = MergeDeep; // => (number | 'b' | 'a')[] ``` +[Playground Link](https://www.typescriptlang.org/play/?exactOptionalPropertyTypes=true#code/JYWwDg9gTgLgBDAnmApnA3gWRVA5igERRTAF84AzKCEOAciVQFoKUBnGOgbgCgeB6fnGx40MAO4Q4AQyhRpiNj0ZoAgnIUj8cALzCc+IiQA8HKMAB2uANoBdADRwLAVxAAjHHYB8XOIN1ecAAUZpa4cAA+Tq4eUACUdnz+WmKSCM5gADbsyshoACoZ2Sm6+qJGYMbWAIyOAEyOAMwOcNZ00nSOdG50tj5+QjqBQdWRcHVjjWPtdNM9CbZJQiXSFjIaiHCWMFLS6VkouahwhQfq8ogleikVVbXjTS2hVt6+-kPBz+FRo1ETUY0Fksyto9jAimhtrs1rILkc1BtTsUDGhrijbi53J4Wm0Ol0en03oNhpjYnNZlEZgsgA) @example ``` @@ -466,6 +468,7 @@ type FooBarTupleDeep = MergeDeep<[Foo, true, 42], [Bar, 'life'], {recurseIntoArr type FooBarTupleWithArrayDeep = MergeDeep<[Foo[], true], [Bar[], 'life', 42], {recurseIntoArrays: true}>; // [FooBar[], 'life', 42] ``` +[Playground Link](https://www.typescriptlang.org/play/?exactOptionalPropertyTypes=true#code/JYWwDg9gTgLgBDAnmApnA3gWRVA5igERRTABo5s9DiwB5MGYCAOwGcBfOAMyghDgDkSVAFouKVjAEBuAFCzhaAGIQIcALwYuqgFyDtEGd1UAhAIZQ9kqMGa4A2gF12cxXHNQNGAEYW9A3ygjAw89ZgBXEG8cJxd5NxUIDy9KfCISAB5E8g8APjkAegKMYwg9ACIDcuk4QIrA6tLQuAiomOd45GVTCwBlMCgUMwATFJw0mizVHItydAsoM0RUlEwIYZR-VgGh4YF2fNkikoMKqpq6uHKGmpC-OAAKa1tcOAAfFsjoqABKWM7UHBEh4AIJQRaIMZUdJgKYQJwzKBOQ7HB6Jd7uCx-RwA7pJCxgiEwqETTKJBGYpGOOaDADG4SgrBQAElmDAIISlqw9DAoOEUAdCsVgRYnLigT0oJzEP1BiNiZoVjC4RSPBT0HSGUzWezpdyEHyUDUFksVmsNlsdiN9ijhZLZbsxQouhL8VAACrhMAAG2oJBJfth9myBv55AALAAmalwewecgCb3AcQCGMalD0xkstkc8FcnmGwVHYrByUJpMpiPR8Uij1e30AdWAMAAFtKFRRxoGMqX4THefyY3HRTHE8mUAIq2nNVmdbmIfqBwLbbHaxSx5W4FHHEA) @example ``` @@ -477,6 +480,7 @@ declare function mergeDeep; ``` +[Playground Link](https://www.typescriptlang.org/play/?exactOptionalPropertyTypes=true#code/JYWwDg9gTgLgBDAnmApnA3gWRVA5igERRTABo5s9DiwB5MGYCAOwGcBfOAMyghDgDkSVAFouKVjAEBuAFCyAJigDGAGwCGUNFwCuzZYxZwQOfERIAeIpODN1h5uQDKEHVGUpy9B6zgoAHjAozAq+lGY03kxscAC8GOwAfAAUsgCQSjZ2DgBccNaM2dGk6ayu7ih5Lm4eJWkQDNGsAPx5USysJQCUeeHUlgW29sVw1RVejR2J0kA) @experimental This type is marked as experimental because it depends on {@link ConditionalSimplifyDeep} which itself is experimental. diff --git a/source/merge-exclusive.d.ts b/source/merge-exclusive.d.ts index 31539dfa6..b6217e663 100644 --- a/source/merge-exclusive.d.ts +++ b/source/merge-exclusive.d.ts @@ -34,6 +34,7 @@ exclusiveOptions = {exclusive2: 'hi'}; exclusiveOptions = {exclusive1: true, exclusive2: 'hi'}; //=> Error ``` +[Playground Link](https://www.typescriptlang.org/play/?exactOptionalPropertyTypes=true#code/JYWwDg9gTgLgBDAnmApnA3gWRVA5igUQA8BjAGwFcBnYANxQF84AzKCEOAciVQFpmUVGJwDcAKDHAAdjBzMAhiTTFy1OigBq8qMHkxgEKQEYMYgJApSlGvSMAuOACMIEMinlTxDCdNlQFSnAq1upaOnoGUgBMphZWavRRDkI6UrheEjzK8TYoAPJg+oZUcAC8cNh4hDnqADzBCZraukXGADRBNfRhLZFRAHziYm7wlqq5Ba1UDg0ThZFUQ2Mh9JMLZRjLjfYIUBSM4gD0h6X9cADq0ADWVBJbc1Mb6PfqSVwAFsCcDEcnZ5dQG4SY5wAACMCovEsqBIMChUDYUDEL1W82KTxRKB2MD2KA6mLenE+31+pyCCOgQA) @category Object */ diff --git a/source/merge.d.ts b/source/merge.d.ts index 8ff09fbed..133c90cbc 100644 --- a/source/merge.d.ts +++ b/source/merge.d.ts @@ -38,6 +38,7 @@ export type FooBar = Merge; // baz: boolean; // } ``` +[Playground Link](https://www.typescriptlang.org/play/?exactOptionalPropertyTypes=true#code/JYWwDg9gTgLgBDAnmApnA3gWRVA5igXzgDMoIQ4ByJVAWmJQGcZKBuAKHeADsYdiAhgGM0AMQgQM7AJABtAB4AuOMyg9cAXWUBXbgGtuEAO7cOcpXG7aQAIxxa4ug8dMziE5avVmbAqJ8RbCAAbDgJOGjQAIT84AF4pc2UrW3tk6zsoMwUAoOCHJ0MTHz9lABEBPhKAL2UbCWCUAVcCDnYUeUhYBGQxCRioeLhsPBQAHnEIABo4AYA+DgB6Rfi5qWW4JJUYNW5NHX0i1w2tlMyHM5wlla3GQPr8g+di9hP3CE8d71eb3384CpVH6bXy1OD1EJNY4rAhAA) @category Object */ diff --git a/source/multidimensional-array.d.ts b/source/multidimensional-array.d.ts index c26a8c48d..6d2d9689a 100644 --- a/source/multidimensional-array.d.ts +++ b/source/multidimensional-array.d.ts @@ -26,6 +26,7 @@ const unknown3DMatrix = emptyMatrix()(3); const boolean2DMatrix = emptyMatrix()(2); //=> boolean[][] ``` +[Playground Link](https://www.typescriptlang.org/play/?exactOptionalPropertyTypes=true#code/JYWwDg9gTgLgBDAnmApnA3gWQK4BsbAAmoKAdgM7ASkCGuAglFDYgL5wBmUEIcA5ElQBaDinIw+AbgBQ0wigDGuGlDQdspBQWpwU4JJhowowAB4AeAJIw9cALxwNAa1IQA7qQB8ACgCUALjhzABESCipSXVMbUkJyOFJsEAAjFCgfaQBIYhAySmpyQNDc8OoAGmlfe084HHwiMPzaBiYWKxsQMrhivIjPGWkFAvhnVw8AZmDDYzN7XX1EaZNTP29x3xkAek27GtH3UgBtAF0Tk9khinhkiAhcFBpSACYpo2W5vTADN7NzG7uHl5Vk8NtJtrs4P97o8zscgA) @category Array */ diff --git a/source/multidimensional-readonly-array.d.ts b/source/multidimensional-readonly-array.d.ts index 13016ea88..88e75569e 100644 --- a/source/multidimensional-readonly-array.d.ts +++ b/source/multidimensional-readonly-array.d.ts @@ -26,6 +26,7 @@ const readonlyUnknown3DMatrix = emptyMatrix()(3); const readonlyBoolean2DMatrix = emptyMatrix()(2); //=> readonly (readonly boolean[])[] ``` +[Playground Link](https://www.typescriptlang.org/play/?exactOptionalPropertyTypes=true#code/JYWwDg9gTgLgBDAnmApnA3gWQK4BsbAAmoKAdgM7ASkCGuASijYdbogIJRQ2IC+cAMygQQcAORJUAWgEpyMMQG4AUMsIoAxrhpQ0A7KQ0FqcFOCSYaMKMAAeAHgCSMM3AC8cAwGtSEAO6kAHwAFACUAFxw9gAiJBRUpKa2LqSE5HCk2CAARihQIcoAkMQgZJTU5JGxpfHUADTKoe6BcDj4RHHltAxMLKRsnNyITi4gdXDVZQmBKsoaFfC6zKyIAKqkPv6kAMzRltZ27qbmiPs2tmHB26EqAPS3bi1LfWxwwc8rbx-9iJ4bvgEANoAXVCILBwNU8woi16KwAQhAILgmKQAEx7KznI5mMAWLF2ezZJEomhBS5om7Ke6PODfV7vOE-ODE5Go8EgoA) @category Array */ diff --git a/source/non-empty-object.d.ts b/source/non-empty-object.d.ts index f42a2db5e..132b1ee62 100644 --- a/source/non-empty-object.d.ts +++ b/source/non-empty-object.d.ts @@ -28,6 +28,7 @@ const update1: UpdateRequest = { // @ts-expect-error const update2: UpdateRequest = {}; ``` +[Playground Link](https://www.typescriptlang.org/play/?exactOptionalPropertyTypes=true#code/JYWwDg9gTgLgBDAnmApnA3gOQgOwKLhIDyARgFYoDGMAvnAGZQQhwDkSqAtPSgM4ysA3AChhHNAFVeKKHAC8GYQEgcAQxAoAXHH5RgOAOYilvAK5Q1G7bv1HlwACbacpkCRkiaIscklgHqjAoAEooAI6mfDAAPHg4MMBIcCgAHkE4DrxwEORUMAB88nDY+ISIpBTU0QAKqrDAqgA2sfGJiPn53pS4-HCm-oEoAIzaEgNBoRFR0VIyhQroypZabACCjcCUKKwANMpmFuorrKuUGrvCXqIA9Ndwq-CNKKq9Q3AA1iiIcMBZUOGmYD-Bw7BAACxkKHo0DQMDBvzgAHdgI1GnB-pBYHBVHAAEwAZlxuOSUCYUE0wlucAAKr42OgaKwflkcBB4C9eMADGoSE8EBAEHTWGMAhMAdNZlB8qxKXcAAIwXicVKoajK0nQYTdHC9fqilC40bjELi-gzaRSooMwRAA) @see Use `IsEmptyObject` to check whether an object is empty. diff --git a/source/non-empty-string.d.ts b/source/non-empty-string.d.ts index de56f2e8a..ae913f5f9 100644 --- a/source/non-empty-string.d.ts +++ b/source/non-empty-string.d.ts @@ -24,6 +24,7 @@ declare const someString: string foo(someString); //=> Error: Argument of type 'string' is not assignable to parameter of type 'never'. ``` +[Playground Link](https://www.typescriptlang.org/play/?exactOptionalPropertyTypes=true#code/JYWwDg9gTgLgBDAnmApnA3gOQgOwKLhIDKMUwOA5gL5wBmUEIcA5EqgLS0oDOMzA3AChBAExQBjADYBDKGloBXHOJjBcdCBAA8AFTgoAHjBQ4R3OLzKUAfAApL5CgC442fIUQkrFXdYCULgBuEMAiQoK0mrbM0sx+QgD0CQC81nAA8gDSwklwAAIw3OyGqCrFUAxQEVHMcYkpaXgV0C4AglAUCiAm8BC0CMhozABEw8xwwOY4EPDS3NzAFDjSAEaSaDAQcGCy0t3GUHB9A6gsOCiBKFDMAHTCYlKyaOK4vBaMKF6OLg6UgrkFIolCQwcqVaoQewfL6UeL-BpwJqVNodLo9I79NhDX4UcaTODTWbzRbLNYbLY7KB7FAHDEnIbnS7XG5AA) @category String */ diff --git a/source/non-empty-tuple.d.ts b/source/non-empty-tuple.d.ts index 21d9e1517..941b6180a 100644 --- a/source/non-empty-tuple.d.ts +++ b/source/non-empty-tuple.d.ts @@ -14,6 +14,7 @@ sum(1, 2, 3); sum(); //=> Error: Expected at least 1 arguments, but got 0. ``` +[Playground Link](https://www.typescriptlang.org/play/?exactOptionalPropertyTypes=true#code/JYWwDg9gTgLgBDAnmApnA3gOQgOwKLhIAqArmADYoC+cAZlBCHAORKoC0tKAzjMwNwAoQQGNcvONxJMAvHAAUAOmU5pAIxRRuALjjZ8hRKQooAPKpAaoAPgCUcGdbgWr3RVBQATEiJTz5MBAwAIbkADRwAG6hJCj2jghBoXAA1FExKBEADLZCglIg8gCMEQBMEQDMuYIA9DUJAGzCdXAAAjDc7CgAHqgiMF1QDFD50vLVdQl4Q9C6eL0o-V5wwfCUwRJFK1AA5tIoOB0RaiTwO0FwWYpAA) @see {@link RequireAtLeastOne} for objects diff --git a/source/numeric.d.ts b/source/numeric.d.ts index 1eabb32ae..65d627343 100644 --- a/source/numeric.d.ts +++ b/source/numeric.d.ts @@ -45,6 +45,7 @@ import type {Finite} from 'type-fest'; declare function setScore(length: Finite): void; ``` +[Playground Link](https://www.typescriptlang.org/play/?exactOptionalPropertyTypes=true#code/JYWwDg9gTgLgBDAnmApnA3gMWAO2DFAXzgDMoIQ4ByJVAWhJQGcYqBuAKA4BMUBjADYBDKGhIBXHHxjAIOOExQwAyn2goAPABU4KAB4Ec3JnBziQAIxRQAfAAoBKHAHMYACwBccbHgLabAJReAG4QwNxsQA) @category Numeric */ @@ -115,6 +116,7 @@ import type {Float} from 'type-fest'; declare function setPercentage(length: Float): void; ``` +[Playground Link](https://www.typescriptlang.org/play/?exactOptionalPropertyTypes=true#code/JYWwDg9gTgLgBDAnmApnA3gMQDYQIYwC+cAZlBCHAORKoC0JKAzjFQNwBQHAJigMbY8UNCQCuAOz4xgEcXCYoYABRRQ+KcTDwBzFAB4AKnBQAPGBu5M440SABGqgHwAKbBu0wAFgC44OfDCGjgCUvgBuEMDcbEA) @see {@link Integer} @@ -179,6 +181,7 @@ import type {NonNegative} from 'type-fest'; declare function setLength(length: NonNegative): void; ``` +[Playground Link](https://www.typescriptlang.org/play/?exactOptionalPropertyTypes=true#code/JYWwDg9gTgLgBDAnmApnA3gOQgO0ygcwEMZgA3FAXzgDMoIQ4ByJVAWhpQGcYmBuAFACAJigDGAGyJQ0NAK44xpXHC4oYAGRQ4CMABYAeACpwUADxjbhXODjkgARiigA+ABQTtuvQC442PEISchRjFwBKPzIIYGE+IA) @category Numeric */ @@ -201,6 +204,7 @@ import type {NonNegativeInteger} from 'type-fest'; declare function setLength(length: NonNegativeInteger): void; ``` +[Playground Link](https://www.typescriptlang.org/play/?exactOptionalPropertyTypes=true#code/JYWwDg9gTgLgBDAnmApnA3gOQgO0ygcwEMZgA3FASRxkJSgF84AzKCEOAciVQFpmUAZxicA3AChxAExQBjADZEoaZgFccs0rjiCUMADIocBGAAsAPABU4KAB60cUwXByqQAI3oA+ABTyjJqYAXHDYeIQk5FQ0dFBWXgCUIWQQwFKiQA) @category Numeric */ @@ -218,6 +222,7 @@ import type {IsNegative} from 'type-fest'; type ShouldBeFalse = IsNegative<1>; type ShouldBeTrue = IsNegative<-1>; ``` +[Playground Link](https://www.typescriptlang.org/play/?exactOptionalPropertyTypes=true#code/JYWwDg9gTgLgBDAnmApnA3gSQM4DkUDmAhjMAG4oC+cAZlBCHAORKoC0NK2MTA3AFD9WaAMoALCAFcANgBMAQigBiRadjQBeODnzFSFADwBGAHwDhccVLmKAKlEmbteQiXIoDbU7yA) @category Numeric */ diff --git a/source/omit-deep.d.ts b/source/omit-deep.d.ts index 7109eb3b9..f1368fd64 100644 --- a/source/omit-deep.d.ts +++ b/source/omit-deep.d.ts @@ -87,6 +87,7 @@ type AddressInfo = OmitDeep; // ]; // }; ``` +[Playground Link](https://www.typescriptlang.org/play/?exactOptionalPropertyTypes=true#code/JYWwDg9gTgLgBDAnmApnA3geRMGARFFMAXzgDMoIQ4ByJVAWjJQGcYaBuAKC-rQEkAdmQhwAvBi4BIAK4sUUISIBckqVMEBDEClVsowQQHNu6uSgA2rFkoir009SLtx9hk4+KmvXH72RoAKryZDIWtuJw2LgERAA8tgA0tOaKwhAAdOZWLDbpNAB83AD0xWIFkqVwsvJpKpXF1Rrauq4wBsYljVI+VX5VAMoyYJCwLHBQKCAQAG7ucCBhMMBgVnBgmjAAFiz+qHC2AIyRDjUKtvaOWjp67e6mZzksAGLAlgAmtx0eZvJPF2onBAXG5Op5vNw-Hw4MEUKFwuljhJovhCGAEojkjRUrYsn9rLYaHAAD4pWq47LWV4fQpdcoNao49KXKrqa6tUEeVm9Rr9RpDEbQGDjTRQKCaRB7NAAQUiKNi6IA2ocsc4aMkAEwAXSxh1pXFK9OVyRkggA1oIIAB3QSarXcA384ajYUTFAAYxkUBY80MMFEovFkqlB3SGpO0k073ek1yqkVjlO6n0hBgX3unkSiccUhTKBgGvTYPUUmcRZ+PSzUntvgd0Ol0djeREcpwqPitg1WKjMesGUOGTVRUd9IcrJ7TfjjqaY+6yfaqfLXSaxCzrKks6auYX+cLbW+y-UPOqNb6HCAA) @category Object @category Array diff --git a/source/omit-index-signature.d.ts b/source/omit-index-signature.d.ts index 1bfeb808f..e1ec0ff73 100644 --- a/source/omit-index-signature.d.ts +++ b/source/omit-index-signature.d.ts @@ -19,6 +19,7 @@ const indexed: Record = {}; // Allowed const keyed: Record<'foo', unknown> = {}; // Error // => TS2739: Type '{}' is missing the following properties from type 'Record<"foo" | "bar", unknown>': foo, bar ``` +[Playground Link](https://www.typescriptlang.org/play/?exactOptionalPropertyTypes=true#code/MYewdgzgLgBAlmAJgUwB7MQLhgJWaAJ0QB5oCEBzAGhgFcwBrMEAdzAD4YBeGAbwF8A3DAD0ImAEEANlNYYAUPLEwAAlAgBaNAAd8ULQQIgC80JFgNkATwzY8hEgHIAZiBCOa9Jqw7c+Q0XEAUUNjJXEuTgAVAGUAJgB2AGYATmwoq10YRwFHeAgYAFs4CAhKGCgAC2QYVxlWcu0jXQIoOGQC5yNCisyax3tjEgAiVxBhmAAfGGGAIwBDAmHPRmY2dkdsMZoFgiA) Instead of causing a type error like the above, you can also use a [conditional type](https://www.typescriptlang.org/docs/handbook/2/conditional-types.html) to test whether a type is assignable to another: @@ -33,6 +34,7 @@ type Keyed = {} extends Record<'foo' | 'bar', unknown> : "❌ `{}` is NOT assignable to `Record<'foo' | 'bar', unknown>`"; // => "❌ `{}` is NOT assignable to `Record<'foo' | 'bar', unknown>`" ``` +[Playground Link](https://www.typescriptlang.org/play/?exactOptionalPropertyTypes=true#code/C4TwDgpgBAkgdgEwgDwgqBeKBvAvlFYCRAZygCUIBjAewCcEAeE4OgSzgHMAaKAVzgBrODQDucAHwAoAJAB+KAHJAoORQABnjVQ2ZAIYkSbTnF0AjADbRgNdZVoNmrDj35CR4iWsWyAXEsAy5Oqa2mQAcgDyACpQ+obGZpZQ1rbU9Ews7Fy8AsJikl4A3FIA9MWYEkqqGrhaOjEGRiYWVjZqdmmOmS457vneUqCQUADSECBomDj4hMQIZO0OigBmNDSKUAA+Sqa6dIrZbnnS8lAARFXBdbGNCS0p9kzLq+tbijt7B7keaqe+Z4HVWphKL1OJNRLJNqpRYrNabba7fauL75U5FUrlf5BGohKARaLXeLNJKtBaPWEvBEfZG9TynIA) Using a [mapped type](https://www.typescriptlang.org/docs/handbook/2/mapped-types.html#further-exploration), you can then check for each `KeyType` of `ObjectType`... @@ -42,6 +44,7 @@ type OmitIndexSignature = { ]: ObjectType[KeyType]; // ...to its original value, i.e. `OmitIndexSignature == Foo`. }; ``` +[Playground Link](https://www.typescriptlang.org/play/?exactOptionalPropertyTypes=true#code/C4TwDgpgBA8gtgS2ASQHYBMIA8DKCDmqAhsAK4BOEAPDAEYBWEAxsACrgQB8UAvFAN4AoAJABtANIQQ7SFASooAaykB7AGawGzNhygB6PVACyRMFAhEmACyVSo6qAAM6jFjIiOAdN5EBdAFyarjqQElLuvgDc+obensAqcsAAzvbkBPJEADZQAG7ZpBAANHKeEJ5O8EhomLgExGSUVABiKircPHytKl6CAL6RQA) ...whether an empty object (`{}`) would be assignable to an object with that `KeyType` (`Record`)... @@ -55,6 +58,7 @@ type OmitIndexSignature = { ]: ObjectType[KeyType]; }; ``` +[Playground Link](https://www.typescriptlang.org/play/?exactOptionalPropertyTypes=true#code/C4TwDgpgBA8gtgS2ASQHYBMIA8DKCDmqAhsAK4BOEAPDAEYBWEAxsACrgQB8UAvFAN4AoAJABtANIQQ7SFASooAaykB7AGawGzNhxHCA9PqjIAzlAAG-AL7moREyYLFaAG2jAVFgErMV5dFSS0hwANFCkqIqoKgDuqJzmAPx69gJWUNjAEBhmPkx+AUEyEGERUbHxesKJUKgQAG4Q5FCGUICg5BbWtghm9o6ERK7unuZ5BYFSxaWR0XEJVQBcUEUcLUaAMuSdNnJmAHIwrHYOToNuUB7evv4TwZDT5XPmIgC6S3SMLMUSkxzPANyCKx-IA) If `{}` is assignable, it means that `KeyType` is an index signature and we want to remove it. If it is not assignable, `KeyType` is a "real" key and we want to keep it. @@ -81,6 +85,7 @@ interface Example { type ExampleWithoutIndexSignatures = OmitIndexSignature; // => { foo: 'bar'; qux?: 'baz' | undefined; } ``` +[Playground Link](https://www.typescriptlang.org/play/?exactOptionalPropertyTypes=true#code/JYWwDg9gTgLgBDAnmApnA3geRMGBJAOwBMUAPAZWAHMCBDGAVyhQF84AzKCEOAciVQBadigDOMXgG4AUNOAEYKKO1oBjNAFFStcABs06aQEgA9CbgAVABZi08kqTijqdRs1FwA7sF264AIzRmEAgANxQiADpjAG1SAC4nGCh5KgBdRNoCRFiEuAIGEECoDLgsnKM4xNFEIohdUvLcxIADG1oiQQASdHEUgioWFtK+1Oa4Fp7RgZZBGFofYerkscq8tpQO7t6VmbmF3SWk-qpxyfR-ankYIZHd07XWlCKIkk6egpeoW+WT2VNzNZbHAyGBdMBVLhdIg4CR2PIInAANYoRAeby+ODBBYEaJGdgQCCJXj+WhQKTGACODFIAH5iaSAF4UliyASabR6FAAdVwVggDHwxDIlBo9CYYjgAF44NhcIQHKLXBKADxaHRglAAPhkZmlWowHEJDLJUjg1LpJuZcAAPnAGML4QQIpI4CwgA) @see {@link PickIndexSignature} @category Object diff --git a/source/optional-keys-of.d.ts b/source/optional-keys-of.d.ts index 2e748865f..bba625200 100644 --- a/source/optional-keys-of.d.ts +++ b/source/optional-keys-of.d.ts @@ -30,6 +30,7 @@ const update2: UpdateOperation = { luckyNumber: REMOVE_FIELD }; ``` +[Playground Link](https://www.typescriptlang.org/play/?exactOptionalPropertyTypes=true#code/JYWwDg9gTgLgBDAnmApnA3geTDYEB2AhgDYDSKiAzpgGYA0cAogB4DGKOAvnDVBCHADkSVAFoaKSjEEBuAFBzg+GCig1C7OAFVKqjHICQRECgBccKVCUBzeQcoBXKMbMWYV-LYUHiD1gGtEADkHEAAjVQB+c3xQiKh5TgVWAik4ACVGAFlMADVGAH0AMQBJRgAZABE4AF44AGVEcIhiAApBKBQQCAA3NBpgFGIAEwsmsJbBAEp5ETQtMGHCFWxVZbx8AB5GZWAkOBRmFXxhyjgIMIArFFYYAD5apjYOGE2ABUJYYBJt3aQ7hjYXAEEjkKi0X64f4PABk+gMAG0wXAlHAgRtQRRqDRIXtEHcALrRJh-RBIigEuAAHwQyBQEBoGWyeUKpQqlUS8jkKXwaQci2WKAAjOYFksVqgoOsCJsdKoHnV0IYXOZBABBYjAdiCOScLk8vkClQAJlFRpQqylwK2cqgCvhKqEACELoI6IZfAFgnFVOZMjl8sUylVdTIgA) @category Utilities */ diff --git a/source/or.d.ts b/source/or.d.ts index ca2bc0a68..967b2e601 100644 --- a/source/or.d.ts +++ b/source/or.d.ts @@ -22,6 +22,7 @@ type FT = Or; type FF = Or; //=> false ``` +[Playground Link](https://www.typescriptlang.org/play/?exactOptionalPropertyTypes=true#code/JYWwDg9gTgLgBDAnmApnA3geSgXzgMyghDgHIlUBafFAZxlIG4AoZitAFQ7gF45sAPDCgBXFABoEolAD4WAenk8ZUsa3ZwOAMV78oQ6ZPwBDADa1ZCpSuFq2yNFu59BJ8xNWXmi5Z-UO4LR0XfTcLIzMLOW9rAkiUIA) Note: When `boolean` is passed as an argument, it is distributed into separate cases, and the final result is a union of those cases. For example, `Or` expands to `Or | Or`, which simplifies to `true | false` (i.e., `boolean`). @@ -45,6 +46,7 @@ type D = Or; type E = Or; //=> boolean ``` +[Playground Link](https://www.typescriptlang.org/play/?exactOptionalPropertyTypes=true#code/JYWwDg9gTgLgBDAnmApnA3geSgXzgMyghDgHIlUBafFAZxlIG4AoZitAQTgF45sAefAEMANrRQAaOACMIEESiEA7AHwsA9Ou4qZchctbs4AIR58o-WfMVKpwsSjXNN23dYNtkaAMJmBMKABXSTd9VQ0tHQDgwy84ABE-CyswqWjHCNd02NQ4AFEkyz0bKRSbJxcdMuUgA) Note: If `never` is passed as an argument, it is treated as `false` and the result is computed accordingly. @@ -73,6 +75,7 @@ type F = Or; type G = Or; //=> false ``` +[Playground Link](https://www.typescriptlang.org/play/?exactOptionalPropertyTypes=true#code/JYWwDg9gTgLgBDAnmApnA3geSgXzgMyghDgHIlUBafFAZxlIG4AoZitAQTgF45sAeGFACuKADRwAdigBuKKAD4WAemXcFCESlbs4AIR58o-aXKgShopc1XrNoncjQBhQwPwBDADa1xU2fLWthqePtpsTnAAIm7GpvISob5BaiHevo6ocACisfwARhAQXigekhLxiiqpcIXFpZKZaABieZUSdSVlKXadDU1wAOJtAeb+Zj1pYUA) @see {@link And} @see {@link Xor} diff --git a/source/override-properties.d.ts b/source/override-properties.d.ts index 01f5be5d2..8b032e29e 100644 --- a/source/override-properties.d.ts +++ b/source/override-properties.d.ts @@ -25,6 +25,7 @@ type Baz = OverrideProperties type Fizz = OverrideProperties // Error, type '{ b: number; c: number; }' does not satisfy the constraint '{ b: number; c: never; }' ``` +[Playground Link](https://www.typescriptlang.org/play/?exactOptionalPropertyTypes=true#code/JYWwDg9gTgLgBDAnmApnA3geQG4qlYAExQAUoJVZgUBnAXzgDNyQ4ByJVAWkdpjYDcAKCGc0AMQgQ4AXgxCAkAEMAXHBowCAOwDmigEZqN2vXRFi4AISVRZcHHgLEyFPDGo0APJIgAaDIZwWgCuIPp4dAB8QgD0MTKRGKrqmsC6-oEhYREicXAAAjA0XCgAHqgAxjAl+NCiyGjWAF52DvhEpOSU7rTeUv7oFWpZ4VBRsTFwAKK1UP4WbOhwQ0GhowJwdGxwhBC0QRDwNEruNIyICAAWaBUQWsZKafCLy8MouFAbW7mThcVllWqjjqFnEwCaLTkbScnVcVF6PgGmTWeA2KxGEWieRm5DmCAa7CWyOyn1eqxJX22u32WkO6hOwDOFxg12WdweT0JcGJ6zJWneqM2bCAA) @category Object */ diff --git a/source/partial-deep.d.ts b/source/partial-deep.d.ts index d1b634dc1..893e74fdb 100644 --- a/source/partial-deep.d.ts +++ b/source/partial-deep.d.ts @@ -34,6 +34,7 @@ export type PartialDeepOptions = { partialSettings.languages = [undefined]; // OK ``` + [Playground Link](https://www.typescriptlang.org/play/?exactOptionalPropertyTypes=true#code/JYWwDg9gTgLgBDAnmApnA3gBQIa2NgGwBEUUwBfOAMyghDgHIlUBaKlAZxgYG4AoPszQBlFDBjAAdgHMOcALwY+ASALYZAV2zTOALjhcoU6QG0Auv3L8+AExQBjNVDT2IkrnDC4JhUeOMc+jh4hCRkADx+EjIcADQYzvYaUBwoAJKSMBAAglBQ2IiBCFAaKDxwhAQQAO4AqpJ2VFIoNhkAcm4AKhpgBCi5+YX6MCUo5AB81l4hBFEBAHRqmtqcCnAmGg0oTZItFnAA9AdwAPIA0kA) */ readonly allowUndefinedInNonTupleArrays?: boolean; }; @@ -70,6 +71,7 @@ const applySavedSettings = (savedSettings: PartialDeep) => ( settings = applySavedSettings({textEditor: {fontWeight: 500}}); ``` +[Playground Link](https://www.typescriptlang.org/play/?exactOptionalPropertyTypes=true#code/JYWwDg9gTgLgBDAnmApnA3gBQIa2NgGwBEUUwBfOAMyghDgHIlUBaKlAZxgYG4AoPgRTwOwmMAB2Acw5wAvBj4BIGCgAeMAKIATYDGgAuRUqVUIEmAGVgALxRGAjABYANMtPmYAYQgFDjAGIABhDQhjcTMwsAdRRgKQALGCMnEIjyCOwAV30AYzowIVUjKkJRTJyIDmwAN3sEKCyUN3J+PnyJLjhsMELES1qUbUsxSRl5OAAKarrh0ekOIxw8QhIyAB5mFAgqOFEYcQWAPgBKeSOp5XQAOlv9w5kXOFvrmaGRg7GOJ9UNHT1-Dc7vMZNdflpdPooE8Xm85p8FmD1BCAVByOQ+Cc2vcvhMen0BrMPg8OJN0OD-lCjOgojBYvEkkYAKwhdFYoA) By default, this does not affect elements in array and tuple types. You can change this by passing `{recurseIntoArrays: true}` as the second type argument: @@ -86,6 +88,7 @@ const partialShape: PartialDeep = { partialShape.dimensions = [15]; // OK ``` +[Playground Link](https://www.typescriptlang.org/play/?exactOptionalPropertyTypes=true#code/JYWwDg9gTgLgBDAnmApnA3gBQIa2NgGwBEUUwBfOAMyghDgHIlUBaKlAZxgYG4AoPszQBlABbZUcALwY+ASAAmoFADsOwCGoBccANoqAriABGKKABo4hk2YC6-cvz4BjTVzhhcMfATESUOjh4hCRkADx+qJboUCjOBlAcKACSKjAQAIJQUNiIHDowUAYo5AB80rKKymoa2nq2lgD0jXAA8gDSfI4CnsG+4qgAdEogqupuFboAjACs9nDNbe1AA) @see {@link PartialDeepOptions} diff --git a/source/partial-on-undefined-deep.d.ts b/source/partial-on-undefined-deep.d.ts index c8b3f2372..d6905e298 100644 --- a/source/partial-on-undefined-deep.d.ts +++ b/source/partial-on-undefined-deep.d.ts @@ -49,6 +49,7 @@ const testSettings: PartialOnUndefinedDeep = { }, }; ``` +[Playground Link](https://www.typescriptlang.org/play/?exactOptionalPropertyTypes=true#code/JYWwDg9gTgLgBDAnmApnA3gBQIa2NgGwHkA7AVRIBMUAzYElSgERRTAF84aoIQ4ByJKgC0NFAGcY-ANwAoWfRgooNbAGM0AZRQwY9AObiMsgJAQweiCQCCALjiSoBuWYvArAIXskAriABGynAAPnA+VLT0jC7iPv5Eblb26KYmsfGJNvb+EBAEKNgkLmlxCZYkXnA5eQUkIWERdAyULuyy7HKyalaSCBIw2roG4vY4eISkFNRNjCxsADyDeiSGAHxwALzGruV2AjS5-AA0pgD0p3CAvBuAkjtw5uUecMBGJBAA7neZhHCFlHBqhSqaF4wF0jFM6TK7hIyVSkMyexgUB8KBOJhM5yut3hDyeL3en3K32wRjeKAIBB+VH+gMCdxAoKUlFM7BOHSAA) @category Object */ diff --git a/source/pascal-case.d.ts b/source/pascal-case.d.ts index 0f102a8e8..1506922ac 100644 --- a/source/pascal-case.d.ts +++ b/source/pascal-case.d.ts @@ -37,6 +37,7 @@ const dbResult: PascalCasedProperties = { OtherField: false, }; ``` +[Playground Link](https://www.typescriptlang.org/play/?exactOptionalPropertyTypes=true#code/JYWwDg9gTgLgBDAnmApnA3gBQIYGcDG2ANgMJ4oC+cAZlBCHAORKoC01KuMjA3AFB8A9ILgBlUGCIoB+CADsucXPRQA1bFGDYARlIBccHAWJlcKADyNqECK20bGAPjgBeJgDEbAIQf9ZC+DAoThQoADcUEnkzfABXGGAIgFUwVChCMwMjQlJyS2tbLwBBACU7bAAvRgAaDCCQ8MjolDiE5NTQjJQDGChYymc3Rk8IYpKfKv4hESKAEzDsOXwUWYEWNGyTclnMOjSEznMAFUGMPgBIAG0AaThgOTgAaxRECGo4I7g8Qzwc0wtro4ALoGI43IF8ChTe4wULUbDLOAlbAAdwA8mAEtEzudGLMoIhWH05IwDNobFJFvxcdRYkQiAB9eEgYBERAMuTYEAoUlKXr3ADm1IKBjksRA2lC1LGBi4mjkQouAEUkgAtBkqgAaovFkqg1MYaKOAAkAKJldwASVNABkACK88kQSlyfhQmTReCzbQlTh0mBZX5bMw7PahA64czI9GY4DRU7oC52gklWJyHp9FDVC7uOlEdxc1mIAByXO6THsUAAdAArXA1HM2AwARgATABmbPnHxQAxWGwN85K2IVYcADwMADYu2iYAALULuYAoIizAzwohmbNQoA) @category Change case @category Template literal diff --git a/source/pascal-cased-properties-deep.d.ts b/source/pascal-cased-properties-deep.d.ts index 1e2fb722b..6051362af 100644 --- a/source/pascal-cased-properties-deep.d.ts +++ b/source/pascal-cased-properties-deep.d.ts @@ -49,6 +49,7 @@ const preserveConsecutiveUppercase: PascalCasedPropertiesDeep<{fooBAR: {fooBARBi }, }; ``` +[Playground Link](https://www.typescriptlang.org/play/?exactOptionalPropertyTypes=true#code/JYWwDg9gTgLgBDAnmApnA3gBQIYGcDG2ANgMJ4oAmmUEqswKuAIiimAL5wBmNIcA5ElQBaLoxj8A3AChpwAHYwUULtnxoAqrmUZpASACu2qAEkKALjjyDIAEbKZh4wDlsIFJdwwoCgOYz2WQUlFTVNYwB1YBgACwAxHxR5ClxdJ2UTeS4ISy0HfSNlBIZk3FzjAG0AXQDZfAh5LzgoRgMiGEscAmIybSoaOhgGZlYwAB48qCjY4qSUgD44AF40yczsy3R9PTWLOABGABptydd3S34AFQgQfmO9dnvJ2dLLCu2tvS-dywAme++LjcHgEACllFBEHdto8PtsdsYzJYAMwAhHKM4g-gAZTAwAA1ihoV9YXoqsd2DJpPVGvAwC1jAA3FAkBrafAGIbMjRgOiEbSdPCEUjkfq0ZRDRgsNhjdDZCAAIQAggAlTby5UqhXAABebzlEEVqoV2D1cC8PnkvnYVXYjww9MYymZrMaKA5XJQPL55Es3gMKHYixWnzihs1m22YaNWt1+vh0c1JrN-AtfmJD3J+lhlKAA) @category Change case @category Template literal diff --git a/source/pascal-cased-properties.d.ts b/source/pascal-cased-properties.d.ts index 0d8466a5e..0188df93e 100644 --- a/source/pascal-cased-properties.d.ts +++ b/source/pascal-cased-properties.d.ts @@ -28,6 +28,7 @@ const preserveConsecutiveUppercase: PascalCasedProperties<{fooBAR: string}, {pre FooBAR: 'string', }; ``` +[Playground Link](https://www.typescriptlang.org/play/?exactOptionalPropertyTypes=true#code/JYWwDg9gTgLgBDAnmApnA3gBQIYGcDG2ANgMJ4oAmmUEqswKuAvnAGY0hwDkSqAtK0YwuAbgBQY4ADsYKKK2z40AVVxyMYgJABXNVACSFAFxwp2kACM54nXoBy2EChO4YUaQHNxTCfghTXOChGbSIYExwCYjI1Kho6GAZcAB5VOQA+OABeDU00g2M4AEYAGi18hycTLgAVCBAuMqZxMT8A+DBgvQA3FBJ-NXxtRN7lMDpCNQi8QlJyONo5RMZk9FYICAAhAEEAJRc3TyYSjE7GOV7+gJQhkZQxifITN20UJkyc9C0AMQ2d-e4rncUg8jTEzSAA) @category Change case @category Template literal diff --git a/source/paths.d.ts b/source/paths.d.ts index 679115295..ca37f77d1 100644 --- a/source/paths.d.ts +++ b/source/paths.d.ts @@ -37,6 +37,7 @@ export type PathsOptions = { type B = Paths; //=> 'array' | 'array[0]' ``` + [Playground Link](https://www.typescriptlang.org/play/?exactOptionalPropertyTypes=true#code/JYWwDg9gTgLgBDAnmApnA3gBQIYwBYDOAvnAGZQQhwDkSqAtKSgTNQNwBQHdaAglFGyIAogA9s4ADZoAvBg4BIbAKEAuOAG1qpCBGoBdTkU7dkfOHJz4CAHn6CR4qSgA0GAEaCAxgGsUMADkIGFxgCAA7dVJsSQIUIgA+TgB6ZJkEmmUHajgAH0yVRAA6AAZqLh44ACELOCtCO0KxCTBpN3RPbF9-IJCYMMiEKABXeKSOVPSC7LzpoQ0S-WogA) @example ``` @@ -52,6 +53,7 @@ export type PathsOptions = { type B = Paths; //=> '[1]' | '[1][0]' ``` + [Playground Link](https://www.typescriptlang.org/play/?exactOptionalPropertyTypes=true#code/JYWwDg9gTgLgBDAnmApnA3gBQIYwBYDOAvnAGZQQhwDkSqAtKSgTNQNwBQHdaAcgK4gARiigBpFIgCiAD2zgANmgC8GDgEgAjAC44AbWqkIEagF1ORTt2RoAgnFU58BADwDhoidLmKUAGgwhKGwAYwBrFBheCBhcYAgAO11SbAUCFCIAPk4AehzlTLhNOAAfGk1qUvKAOgAGai4eOAAhBzgnQjdBEXFJWXkwJQD0INCIqJi4xN0YKH4M7I48gpo9TVNKsuo10z1ajaA) */ bracketNotation?: boolean; @@ -81,6 +83,7 @@ export type PathsOptions = { type LeafPaths = Paths; //=> 'id' | 'author.id' | 'author.name.first' | 'author.name.last' ``` + [Playground Link](https://www.typescriptlang.org/play/?exactOptionalPropertyTypes=true#code/JYWwDg9gTgLgBDAnmApnA3gBQIYwBYDOAvnAGZQQhwDkSqAtKSgTNQNwBQHdamELcALwYOASGAATAFxwAdgFcQAIxRROo7PPzQZ6MeOlzFKtftnYQKXftGlgUFjJZRgsgObrRogDbZHcZ1cPfSJ1UI5w7mQ0AEFvbxx8AiE4RMIAHj4WABoMbxRsADdmAHlZb0QZUmxvAhQiAD5OAHpmwQaaSWo4AB8aTW0obr7qAbxoADou3v6tcagJ80th2cHFixQJuwdWGdG5yaXN3xZqLh44ABkC0jTk4TvM-hhc9Hyi0vLKhCh5eqaOK12p0JCt9mtpiMxocNlt7Kc9tCFkcJidWEA) @example ``` @@ -97,6 +100,7 @@ export type PathsOptions = { type LeafPaths = Paths; //=> `array.${number}.foo` | 'tuple.0' | 'tuple.1.bar' ``` + [Playground Link](https://www.typescriptlang.org/play/?exactOptionalPropertyTypes=true#code/JYWwDg9gTgLgBDAnmApnA3gBQIYwBYDOAvnAGZQQhwDkSqAtKSgTNQNwBQHdaAglFGyIAogA9s4ADZoAvBg4BIbAKEAuOP0GIAPOlIQI6llGAA7AOZEAfJwUwArmGnqA2sbPmANBgBGyozAmFkQAupxEnNzIfJKSOPgEcHLxhNqaQmISTije6NLYAG7MAPKmkojqpNiSBCjWnAD0DTJWNMpa1HAAPnAABu1CAHQAJOim9iA+KFBEvd19A4gjYxNTM4P6EHM9tI7SnTsO2YMADAc0R9KDAIznu8fXg35Q1Fw8cAAyKNikKYnJuFS6RE4ikOQw+SKBFK5XUgXsdRsHCaLQWKiWo3Gk2mRA2Bm2Fz2KFOd0uxMez2oQA) */ leavesOnly?: boolean; @@ -134,6 +138,7 @@ export type PathsOptions = { type LeavesAtDepthOne = Paths; //=> 'author.id' ``` + [Playground Link](https://www.typescriptlang.org/play/?exactOptionalPropertyTypes=true#code/JYWwDg9gTgLgBDAnmApnA3gBQIYwBYDOAvnAGZQQhwDkSqAtKSgTNQNwBQHdamELcALwYOASGAATAFxwAdgFcQAIxRROo7PPzQZ6MeOlzFKtftnYQKXftGlgUFjJZRgsgObrRogDbZHcZ1cPfSJ1UI5w7mQ0ABEUMHwALVUIITgcfAIAHj4WABoMCXj8GQAGIgA+TgB6asEKmklqOAAfGk1tKGouHjg4hLwAeVk0YQzCHP4YAvQigZkARkqauobqDrxoADom1vatTagt80tuqNQ+4rwAFQB3VLHcCdzpwquZACZljlr6-c7jhYUFs7A5WHt1gdtidgb4WGdegAZFDYABuzAAgjB+vhhqN0k9si8Zt4UeiCMNvIgZDAoPIUGw4HMSnAllUfqt-ocdhJqEA) */ depth?: number; }; @@ -184,6 +189,7 @@ open('listB.0'); // Pass // @ts-expect-error open('listB.1'); // TypeError. Because listB only has one element. ``` +[Playground Link](https://www.typescriptlang.org/play/?exactOptionalPropertyTypes=true#code/JYWwDg9gTgLgBDAnmApnA3gBQIYwBYDOAvnAGZQQhwDkSqAtKSgTNQNwBQHdamFAVigDG8ALwYOASFLAANigB22ECgBccFlGAKA5p0mzgLAILrN2nQG0AuvsMsAQusvoZ8pSrMwtuoramkELIAJihQ6uhSkgQArgBGgSFhEVHScorKahreFvqSRPoFHEXcyLwCwjA4+ARw4tWEADx8EIIiAHycAPRdou00bhkq1HAAPjT2MMYj49STDjMDQaFQiwAGk8YAdAAk6AoxIHFhRGtjE0YwDlsADItzl9c3W4MeKPeJK1uxCcthH38oN94p8wi90m9qFxQkJZNgoGhSDEFCJgBAFHAIKgFM1cHg4CgAB4wRTBWotNpVPEEdoACjAePUDQAlOoAG4QYDBTgcLGKWnUV6ZajMthwHpwHAEAi87EC0FAn4KkViiVSmV8hTywHA35JIFC4ai8VdSXYaUcCUAARgBHoRNQIntUAoUFl-MFEAgKpNcAAKmUAKIu6BcCXGWQECBwADu0AA1rUY8B8HB4VBsIgNXKHiYtgBGH1q83Zj3zW5F03qy2mm12h2VZ2u91a3NXAuV-1BkNAuAOYTYGIENDzTEKWSIOB4c1jtAoeQqBQwLZAA) @category Object @category Array diff --git a/source/pick-deep.d.ts b/source/pick-deep.d.ts index db9ffbd30..e1b5b5301 100644 --- a/source/pick-deep.d.ts +++ b/source/pick-deep.d.ts @@ -73,6 +73,7 @@ type Street = PickDeep; // }; // } ``` +[Playground Link](https://www.typescriptlang.org/play/?exactOptionalPropertyTypes=true#code/JYWwDg9gTgLgBDAnmApnA3gBWAYwNYAiKKYANHJgIazCUA2RJAvnAGZQQhwDkSqAtKxQBnGNwDcAKEl80AYQgA7VsADmAVyiUYwJXAC8GSQEh1wlFAXK1ALiPHjiyiBR3RUYItVSHlVa7hFdRAAIwsfY0oAEyioEWE7AG0TB3QUhxxgJABGNxgPLwiHd2IYXLh3T290plJ0tIcMrMQAJjyC6sbjEpQYNor8qqKmFIBdEyYfCBgACwsrFVU7SkVEKUnpWTgAOWcUBbUDClxCYjAAHgONLR0lcm4zeaVFgDonF24APikAeh+EZBoXYuK5HNJ-OCmcyWZ62IwQhzvAKVQqSBEjCEbNH-ADK6jAkFgwjgEDAtycdDgYA4qBoIhkgLgAFVoUdsPhGBcqDR6JzLrDrtpdIpPvdHjDrKo3ntuHAAD48cVXF5+FBfX7-LYsixg7GQpUCgD8dnB-0Re2NAw6GshkX8lqCoXCeuMG0xUj1eIJ0BgxOoWkQDNQcAAgjE4sJhKDDOzTiR+ZLNEK7orocrorF4i8AAzqvVbMOZyPR+Fmg2Sk0uyLh+JJU224yZHLtIZV7r5UrlFHVBGu0Y2102kae-GE31wOI4TTmOCeGAQOD+yiBrY4ju9NknPlXJPksVpgUqmuRl7ZF49Pp5iGr9fwQz1qFPCul20ZiMJODJXumRR4RQQAB3RQ6m-dAL36bsMTNYx+xdN1-iYIA) @category Object @category Array diff --git a/source/pick-index-signature.d.ts b/source/pick-index-signature.d.ts index de9392738..c123db54f 100644 --- a/source/pick-index-signature.d.ts +++ b/source/pick-index-signature.d.ts @@ -39,6 +39,7 @@ type ExampleIndexSignature = PickIndexSignature; // [x: `embedded-${number}`]: string; // } ``` +[Playground Link](https://www.typescriptlang.org/play/?exactOptionalPropertyTypes=true#code/JYWwDg9gTgLgBDAnmApnA3gBWAYwNYCSAdgCYoAeAysAOZECGMArlCgL5wBmUEIcA5ElQBaTigDOMfgG4AULLI4ANvVZwcEIpLjjEIAEYQlAaRSIAXHCZFgARyZpdBo3NlC0AUXL1wStAF4MWQBIAHpQuAAVAAsJNGBSCh1aBmZWcTgAd2AlJThWEHoEgDoQgG1yS0koBJoAXUtrPCIITKI5YIrLIiYDFCgGqyJm1vbyyp09QyVBppa2jq64AANY+hJhABJ0atq2ZcHdohpFieXto5o2YRgipQOqmBrj08tVlHWtnae9m7uHnQ-F7jN7bfS0BIwfaHIEnEErFB9EhkDbbHp9KDQx7POEhcJRWLiNAUMBKXDAGBKRBwMicBIoEhwPBmDLZXJwfRoAoQABuDNKnX4zP09H0whw9CJwmZiH4MJxiyc01MiHltQ6nAgEEs-BFUBkIXs5AA-DqRQAvA1sVzuOBeHyklDEMhUFKMFgBODYfDOijUOju1gAHntvhQAD45Pj0LJ8Z0JpdZsN5mM40t0ZyBo1k6MoxF41UpkYkyMFrH80t3p8LrCsYCFeW4AWVjWcddbjkAZc803K2tUd8239O2rgWmzmCIUQoV3YT3m8tEZzkQyvhn+nXu422EA) @see {@link OmitIndexSignature} @category Object diff --git a/source/promisable.d.ts b/source/promisable.d.ts index 727352301..d84308edb 100644 --- a/source/promisable.d.ts +++ b/source/promisable.d.ts @@ -19,6 +19,7 @@ async function logger(getLogEntry: () => Promisable): Promise { logger(() => 'foo'); logger(() => Promise.resolve('bar')); ``` +[Playground Link](https://www.typescriptlang.org/play/?exactOptionalPropertyTypes=true#code/JYWwDg9gTgLgBDAnmApnA3gBShEwDOAhgEYA2KAvnAGY4hwDkSqAtNSvjAwNwBQvhfIgB2AYxoBXMTGARhcUhADmSlFAAUqmABllAUWEwoiAFxx1ASjgBeAHxxsuAiXIAeTlGDClti2cd4+CiuAG4QwAAm9ui8AJCicpxwKIbGNnCEAO6EwPBaukoGRoiWfPGJEOQAdIpK6inFFnwU-LWqGpY29gzUEBAMTbxtauqddg50BChVUByVISjqDMSEUANNQA) @category Async */ diff --git a/source/readonly-deep.d.ts b/source/readonly-deep.d.ts index 5f299d6ca..7c25777f3 100644 --- a/source/readonly-deep.d.ts +++ b/source/readonly-deep.d.ts @@ -61,6 +61,7 @@ if (readonlyLast) { // Error: Cannot assign to 'e' because it is a read-only property. } ``` +[Playground Link](https://www.typescriptlang.org/play/?exactOptionalPropertyTypes=true#code/JYWwDg9gTgLgBDAnmApnA3gJRQQwCYQB2ANogCIopgC+cAZlBCHAORKoC0dKAzjCwG4AUELwoAxsRxQ04on3oQIALgxCAkDlV8owQgHNh6gEar041YQCuIYyijUjeVQEEoUHIgA86FJZt2DgB8wo4idEoAdDhwALysxtKCcAD0KXAuxMQQAO4oeOFRxnEYFnAAzI6p6ZnZeQVCERCRxpHiJQAsAtUZWbn5hc14JQDavqoArNQAut1pvXUDjVF4kWBWPAAWABTjcABs1ACUczV99SJyhApSCvFNkas4MNscAIwnQsB0cNu3MEc1Op-pE0PEAOynBb9ArUERiSTSWTyeAyfBEUgAMSUqmw6JI5EoYC87BQEB+TRCInmAAEYDwOCgAB6ocQwRnuaBCNEEAnY5oxeIsRJQQRCeYAUU5UFUAGEcIRCBB4DgeDxgPpCAgIKwcCw4HZxDgNmhgPBgDw4DEeRwMYg4GBGKhYIhItT0nSGczWez7IwoNzcLysUUSuZVJVhJLpXKFUqVWqNVqYDrhfrDcaeKbzZbrUHbQSHU77Eg3eKPfTGSyJL7pYH8SHmq12vEuuW4FL-bHFcqrYnNdrWOJ0xJM9m4BarXAbXaixBnaX3XBPVWfRz-fXg4h+Y9RnsprN253oN34331QOU6w8COjSaJzmpzPC475yXXUuV96a+uuTy7TuqzrFsux+AcxxRukx4ynAAAKxYuqwwGbPqBC8HAZ7Mha8BEAgyBoCweJbm4HjeOg-6FmB1i2PY1BBCwZZXAoFGkAAMqq8DxCx24rNELzvJ83y-Nx7F8IC6AaLSlbfmyv4BuoIkcaCJQABxGNGXZwPKPYJheyapigt5jg+E65tO+azq+C4ftQQA) Note that types containing overloaded functions are not made deeply readonly due to a [TypeScript limitation](https://github.com/microsoft/TypeScript/issues/29732). diff --git a/source/readonly-keys-of.d.ts b/source/readonly-keys-of.d.ts index 150bdbb19..852eb2d34 100644 --- a/source/readonly-keys-of.d.ts +++ b/source/readonly-keys-of.d.ts @@ -22,6 +22,7 @@ const update1: UpdateResponse = { id: 123, }; ``` +[Playground Link](https://www.typescriptlang.org/play/?exactOptionalPropertyTypes=true#code/JYWwDg9gTgLgBDAnmApnA3gJRQQwCYQB2ANogNIqIDOA8gGYC+cdUEIcA5EqgLR0pUYHANwAoUcEIwUUOjgDGaAKpUZGUQEhCOECgBccQVEkBzMRqoBXKNt0GjpsZqi4CJRHGB4DhSyABGMmIM4tzKYHg40thUkISqADwAolLASHAoAB7ShHhUcBD+AFYo8jAAfHAAvHAACsDyANbJqUgANHDY+ESkFNT0LTBpiOXlTvJEgnCWEVEoAIwGSrPRAnGJKjKVNeiicPue3nDzAEwAzG2iDMJAA) @category Utilities */ diff --git a/source/readonly-tuple.d.ts b/source/readonly-tuple.d.ts index 3a4b813bc..d9d432b1b 100644 --- a/source/readonly-tuple.d.ts +++ b/source/readonly-tuple.d.ts @@ -24,6 +24,7 @@ const homeFencingTeam: FencingTeam = ['George', 'John']; guestFencingTeam.push('Sam'); //=> Error: Property 'push' does not exist on type 'readonly [string, string, string]'. ``` +[Playground Link](https://www.typescriptlang.org/play/?exactOptionalPropertyTypes=true#code/JYWwDg9gTgLgBAbwEoFMCGATCA7ANgTwBUBXMXFAXzgDMoIQ4ByGfMFAWmpQGcZGBuAFCCWbOADEU2AMbBsAc0LoGAXjipMOAiTIoAPLyhz5AGjgBmAHxDB0nLzjziPGJJnGlaEAC4JU2QqeqnAA2owAUhDcABaMZowAssDS0WgouHFMSBAARiiwjAC6NgD0JXAAAjDc7CgAHmzSMLVQdFC29vDR9ChuAYrKvn0eynBqYQDiKNDyKJkRENHYRUJlKpZwAKKt0L6ErChMIYbGZicKhYxwwNxw2BDwaNzcwPLYaDnkcDAQ3wdMUHQWDw+FC51McHBZxgRgujAAdMIypVqrUGigmi02oInC5hoFlPCwMQYgAKRgAZS8jAAlKsSustjsoL4AAp0NiwUGMYkxK5YHh3B5weo3eA4P5iRiAzQgsEw06QhUKaGw+SXeFAA) @deprecated This type will be removed in the next major version. Use the built-in `Readonly` type in combination with the {@link TupleOf} type instead, like `Readonly>`. diff --git a/source/remove-prefix.d.ts b/source/remove-prefix.d.ts index 5fa7e39a9..d5eb749f2 100644 --- a/source/remove-prefix.d.ts +++ b/source/remove-prefix.d.ts @@ -39,6 +39,7 @@ export type RemovePrefixOptions = { type F = RemovePrefix<`${string}/${number}`, `${string}/`, {strict: false}>; //=> `${number}` ``` + [Playground Link](https://www.typescriptlang.org/play/?exactOptionalPropertyTypes=true#code/JYWwDg9gTgLgBDAnmApnA3gJRSCA3FABShQDNgAPAXzlKghDgHIlUBaUlAZxiYG4AUANZoAgnAC8cbLgLEylADxMIAOzYBjABYBDVQHMUTADRwABgBJ0PKMANU2Z09Zi2NMAFwIoAVxRUAPkEAemCJALgbO30hETgAIUlpHHwiEnIKZTVNXQMjU0sXW3tHZyj3L1IdABsufyCBUPDmbT1DJljkNABhJJlU+Qys9Va8k0jXaLLJiu8-QJCwiKiDTtQ4ABE+lLl0pRUR3PbTFf1pt09aGrqFxqXmQ7ajNbQAUW3ZNIVMwtOqYKsqh8IAARigoFQnOYrH9glCisBZq55g0mstJqthF04AAxD4DPY-GEY-T-QHAsEQqG-En-eHlS5VWr1RbNQpA0HgyFAA) Note: This option has no effect when only the input string type is non-literal. For example, ``RemovePrefix<`on-${string}`, 'on-'>`` will always return `string`. @@ -58,6 +59,7 @@ export type RemovePrefixOptions = { type D = RemovePrefix<`id-${number}`, 'id-', {strict: false}>; //=> `${number}` ``` + [Playground Link](https://www.typescriptlang.org/play/?exactOptionalPropertyTypes=true#code/JYWwDg9gTgLgBDAnmApnA3gJRSCA3FABShQDNgAPAXzlKghDgHIlUBaUlAZxiYG4AUANZoAgnAC8cbLgLEylADwADCADs2AEnQ8owNQHMqygDTN1bJmZ0w9AYxgAuBFACuKKgD5BAeh8TPOF19AyEROAAhSWkcfCIScgoVC21gw2MzJgsrDGCHZ1IAQwAbLg9vAT8AoNsQsOQ0AGFomTj5RJVgABMtdDVXEAAjFCgM5m7LazynF3cvX39A5W1+oZHjetQ4ABEW2LkEpWUJlYHh0dNxnpybexmi0vKF6uW+s-XlIA) Note: If it can be statically determined that the input string can never start with the specified non-literal prefix, then the input string is returned as-is, regardless of the value of this option. For example, ``RemovePrefix<`${string}/${number}`, `${string}:`>`` returns `` `${string}/${number}` ``, since a string of type `` `${string}/${number}` `` can never start with a prefix of type `` `${string}:` ``. @@ -76,6 +78,7 @@ export type RemovePrefixOptions = { type D = RemovePrefix<'on-change', `${number}-`, {strict: false}>; //=> 'on-change' ``` + [Playground Link](https://www.typescriptlang.org/play/?exactOptionalPropertyTypes=true#code/JYWwDg9gTgLgBDAnmApnA3gJRSCA3FABShQDNgAPAXzlKghDgHIlUBaUlAZxiYG4AUANZoAgnAC8cbLgLEylADwADACToeUYADsA5lQD067QFcQAIxRQqygDRw1GmFr1UAXHYybgAYxhuEKBMUKgA+QQMDCVCHdW9XI3RTCysbIRE4ACFJaRx8IhJyChU45x19ROTLa09HeP0PeyctPwDSAEMAGy4Q8IFI6Njm8sNjM2q04WQ0AGEcmXz5IsUmCG02HwALdr0UJntHKtS2T2HWwOCwiKiY1fWtnd099Om4ABF5vLlCpTuN7d2+yGR2sJya3nOHW6vWugz+D0BQA) */ strict?: boolean; }; @@ -103,6 +106,7 @@ type C = RemovePrefix<'on-change', 'off-'>; type D = RemovePrefix<`handle${Capitalize}`, 'handle'>; //=> Capitalize ``` +[Playground Link](https://www.typescriptlang.org/play/?exactOptionalPropertyTypes=true#code/JYWwDg9gTgLgBDAnmApnA3gJRSCA3FABShQDNgAPAXzlKghDgHIlUBaUlAZxiYG4AUANZoAgnAC8cbLgLEylADxMIAOzYBjABYBDVQHMUTADTM1bJgD5BAehsTLzbXsNMhIuACFJ0nPiIk5BTKXCAAXKQANigUTHAAPsyhYWBsACxxiUzJ+jqpAEwmSeFWtvaOTFExmcypGQnMuQVuwshoAMI+Mv7yQcrmzgZGpiqkpBbWAnYOZuqDru5tcAAiXX5ygUoABrqqACbRACTo7XnAMDqRwABeKIo8UMAGllRbI7sHRpPTjqdg55cbncHk99JYgA) @see {@link RemovePrefixOptions} diff --git a/source/replace.d.ts b/source/replace.d.ts index 275015ada..c7b158ea3 100644 --- a/source/replace.d.ts +++ b/source/replace.d.ts @@ -57,6 +57,7 @@ replaceAll('__userName__', '__', ''); replaceAll('My Cool Title', ' ', ''); //=> 'MyCoolTitle' ``` +[Playground Link](https://www.typescriptlang.org/play/?exactOptionalPropertyTypes=true#code/JYWwDg9gTgLgBAbwEoFMwBsCGBjFBfOAMyghDgHIYBPMFAWkJQGcZyBuAKA4BMVssoKIgFcAdthjAIouIIw4UAHg4BIAJKiww+CgAeMFKO5M4LKMFEBzADSqAyikxRsACzh6DRk2Ys3VqeVwQQx19Q2NTGHMrDgA+AApVCy0YAC44DRTbFSZHZxd0hydXbLksIJD0gPKUYNEYDgBKKrQaxUztazgi-K7qhTqYWM4ePgEhQjEJKRkyhQBBdHRldU1tdzCvSOi-FR7XDc8Inyts-or6w-DvKN84xJVk7XSOmGzc4oLuvJLVOYu0nBzrUQk0WoElK8uvsXH1WgMQl0EJglukosJ8MMuAB6bFwAAqLiEghgwigMmotDgwBMMCJGxw8BOljg6GABigKK6ogg8AAVsIWHAAAbM4UAOi4-xQ8XIRKWEDgAH5yF1yCq1YA+DcAIbvkRqcXEAXliFHl6EVOvIUvhuFlZsVSo1FCd5EAyuR6g3Y42mlAKuCulXWiGLdCygCMAAZUgAWABMqQjEdVFFSyfIdA9HCNJvIkbocboiatHGlIdlAH1y4KUFAAHKYYKVtNNtWZ7MUat1hsoYulpaygCyVDgAGEIBB0AT2ege2qKK39VmvTmh2OJ-jpz2gA) @category String @category Template literal diff --git a/source/require-all-or-none.d.ts b/source/require-all-or-none.d.ts index 3973a382a..690fd630e 100644 --- a/source/require-all-or-none.d.ts +++ b/source/require-all-or-none.d.ts @@ -36,6 +36,7 @@ const responder2: RequireAllOrNone = { secure: true }; ``` +[Playground Link](https://www.typescriptlang.org/play/?exactOptionalPropertyTypes=true#code/JYWwDg9gTgLgBDAnmApnA3gJRQRwK7BQoCCANqQPJQByEAdigL5wBmUEIcA5EqgLQsUAZxhcA3ACgJvNNiGQ6AExRQ4AXgwSAkDBQAPGAH4AXHAAUASnUA+OCKjA6Ac0laAVkPonzVtbfuOLtpCKADGeESmAEYQEKQoAIZ0koySEqH0InBE8vTKUACMptj4hCTkVLQMADxyCvkANNy6BlxwAD7cHvRcthrowWERKKYwUHgoEqlSGXRZOfUqAEzFuAREZJQ09Ci1wotQTTz6oh1dnnS96po6J6aWNtzoAEQgwkIJTijPps8AFsBnowuA1tN06PdfLYuC83kIPl8fnBnhAANZAkGDcKRBDjSapIA) @category Object */ diff --git a/source/require-at-least-one.d.ts b/source/require-at-least-one.d.ts index bbb7e35cd..76fd3682d 100644 --- a/source/require-at-least-one.d.ts +++ b/source/require-at-least-one.d.ts @@ -22,6 +22,7 @@ const responder: RequireAtLeastOne = { secure: true }; ``` +[Playground Link](https://www.typescriptlang.org/play/?exactOptionalPropertyTypes=true#code/JYWwDg9gTgLgBDAnmApnA3gJRQRwK7BQoCCMAMigIYDOMA8gHYoC+cAZlBCHAORKoBaNilo8A3ACgJ-NNmqQGAExRQ4AXgwSAkDBQAPGAH4AXHAAUASnUA+OLSjAGAc0laAVtQgMT5q2tv2ji7a1CgAxnhEPgBGEBAANlQMksySEmFetHBE8l7KUKbY+IQk5FS0jCgAPHIK+QA0vLoGPHAAPrweXjy2GujaXQymlja86ABEICLUlE4o46bjEADW48w89SHhkSimMFB4KBKpQA) @category Object */ diff --git a/source/require-exactly-one.d.ts b/source/require-exactly-one.d.ts index df557ecf6..74f7dd819 100644 --- a/source/require-exactly-one.d.ts +++ b/source/require-exactly-one.d.ts @@ -29,6 +29,7 @@ const responder: RequireExactlyOne = { secure: true }; ``` +[Playground Link](https://www.typescriptlang.org/play/?exactOptionalPropertyTypes=true#code/JYWwDg9gTgLgBDAnmApnA3gJRQRwK7BQoCiAHgIYDGMANogPIB2KAvnAGZQQhwDkSqALTsUAZxi8A3AChpAtNlGRGAExRQ4AXgzSAkDBSkYALjgAKAJRaAfHHFRgjAOYzdAK1ERGpyzbswHZ1dRFEo8IlMAIwgIGhRyRhkWGWlKL3E4IiUvNShTbHxCEgpqOiYUAB5FZVyAGj4DI144AB8+Dy9eW210PQB6PrgAQRUVRyc4cjgAA0aYabgAaxREOAALdTQAdwg8GhU4SnI8EMnD7jBgOLh1LigAOll3T29zK01bXnQAIhAxUXIThQ31M3wgi2+LF4tT0ITCEQQUDwKGkySAA) @category Object */ diff --git a/source/require-one-or-none.d.ts b/source/require-one-or-none.d.ts index b3b5741e9..2c51c5fe7 100644 --- a/source/require-one-or-none.d.ts +++ b/source/require-one-or-none.d.ts @@ -31,6 +31,7 @@ const responder3: Responder = { secure: true }; ``` +[Playground Link](https://www.typescriptlang.org/play/?exactOptionalPropertyTypes=true#code/JYWwDg9gTgLgBDAnmApnA3gJRQRwK7BQoDyAdiVAHITkC+cAZlBCHAORKoC0DKAzjDYBuAFAjOabH0ikAJiihwAvHGz5CJcsSo0UAHnQiAkDBQAPGAC44ACgCUygHxwBUYKQDmoowCs+Na3snFxg3T28+FABjPCJrACMICAAbFABDUlFaABp2Uws2OAAfdj8aNkdRESiaATgiaRp5KABGaykZZuUMY0iYuIQoPBQRWiqa0jqGzoUAJnb+GcUVQxNzK1sHJWc2dAAiEH4+NI8UPes9gAtgPdo2bN7o2JRrUOHR8dr4aaaFAGYFo05ApuqsyqRAlsdvtDnxjqdznA9hAANa3e6PfovQbvMZAA) @category Object */ diff --git a/source/required-deep.d.ts b/source/required-deep.d.ts index 0c91744a7..351d96245 100644 --- a/source/required-deep.d.ts +++ b/source/required-deep.d.ts @@ -33,6 +33,7 @@ type RequiredSettings = RequiredDeep; // autosave: boolean | undefined; // } ``` +[Playground Link](https://www.typescriptlang.org/play/?exactOptionalPropertyTypes=true#code/JYWwDg9gTgLgBDAnmApnA3gJRQRwK7BQoAmAIiimAL5wBmUEIcA5EqgLS0oDOMzA3AChBbNAGUUMGMAB2Ac25wAvBkEBIGCgAeMAKLFgMaAH4AXKrVraEGTDHAAXijNwZeEACMUUIZeu2AYQgAGxNzXihZOV8rGxgAdRRgOQALGBc3T284AB84PBliFFpZEl8qXwBDPCMAY0YwYMlncw8IEJRKmSqaiG5KgDcWuDaOrtz8wuLS4iEK4VE4bHxCEgkpKMUVZYIiMgowAB516XluAD4hAHorpXPVG7gNbT0DIyhzdEFHvzj7J3MmS8Pm+VyesUCIWg4RgkXk1zBv1siWSaUB7mBEwKRRKMjKoKe8x+1TqDSamla7SaXQRTxJfUGKEpYxkWKmuPxjyoQA) Note that types containing overloaded functions are not made deeply required due to a [TypeScript limitation](https://github.com/microsoft/TypeScript/issues/29732). diff --git a/source/required-keys-of.d.ts b/source/required-keys-of.d.ts index f5455c463..096d03da3 100644 --- a/source/required-keys-of.d.ts +++ b/source/required-keys-of.d.ts @@ -27,6 +27,7 @@ const validator2 = createValidation('surname', value => value.length < 25) const validator3 = createValidation('luckyNumber', value => value > 0); // Error: Argument of type '"luckyNumber"' is not assignable to parameter of type '"name" | "surname"'. ``` +[Playground Link](https://www.typescriptlang.org/play/?exactOptionalPropertyTypes=true#code/JYWwDg9gTgLgBDAnmApnA3gJRQRwK7BQoAmA0iogM4DyAZgL5y1QQhwDkSqAtLSpTHYBuAFAjiKAMYAbAIZEmeAHaSYwCEriSismCgBqs6cGK71SgDwiAkAFElapHBQAPPUuKU4EAEYArKRgAGhtyRGc3FA8vbHxCEjCaWgt7R0QAPjgAXjhYgiIyCiSUh2AkdJD0gApaYBRpYgAuODCguAA3IxNdaGaqzuk8FGbUssQAbTCAXQBKbMyfCAhpFFklGb6otJHSpDmshaWVtdERYAcUKFpZSTQAVUpLjBslWRBhuAEoc4BzUWtKHgoK93s0vr9-oNJABrRAAOTwIB8lwA-M0lIjkVBRPQxJINAIOl1TDBoABGbJaHR6QzGEnmCwPS7VdgglDsNoDIbzImDFAAOhWSh+MAAFnALHAAEwAVhmonxSkJA26pKgUsp2lWNOJZg0jMeUBZgOBb3ZnKM3IOvKGgqiIvFktl8rEAHpXXAAAIwSjcVyoVR+qAsKAiRXK3VqgDMmupBkjDKZRqq7ChsIRSMuHJtaGtXLQmQADC73XBbMHenAAIJQH6IrbeWgIZBodgAIjT8Mxlzb7DgwC8Sgg8FklEowB+rx8KwQEDgYHkZr0UEbzdQHDbbLbcAAPnA2yat+x+UA) @category Utilities */ diff --git a/source/schema.d.ts b/source/schema.d.ts index 9f7e6f2a1..80700963b 100644 --- a/source/schema.d.ts +++ b/source/schema.d.ts @@ -34,6 +34,7 @@ export type SchemaOptions = { // speakers: number; // }; ``` + [Playground Link](https://www.typescriptlang.org/play/?exactOptionalPropertyTypes=true#code/JYWwDg9gTgLgBDAnmApnA3gZQMYAsUgCGAvnAGZQQhwDkSqAtGSgM4w0DcAUF-WgAqFYwbMDCEAdjBZwAvBi4BIQjBgoJAExSsAXHDZRgEgOYBtALrdFLVIQDWKKCz0GjZy12LdeyAUJgiYpLSAOrAMLgAsigwhBoqhHJwOPhEADyCwqLiUiwANBjAGnoSAK4gAEaOHHAShCAoLjCGJsQF6FAo2KVOKACSUhAAglBQhIjOCFClKMQAfNwA9IuycwrLcMqq6lq6cCNjiGnoRSXlVVA1dQ1NLcbzS4ubNij2jpMH48entefVtfVGvpmm4HlwNl4eHw4JkAtlgiwAMIQUpSJIpAiEDL+QI5aQFMqVRztTrdXoDGDDUbjSZkQgAGxYswW4JWa3QrM2KjUmm0k0JF0ez1sDicZyJl05XiAA) @default true */ @@ -82,6 +83,7 @@ const userMaskSettings: UserMask = { location: ['hide', 'hide'], }; ``` +[Playground Link](https://www.typescriptlang.org/play/?exactOptionalPropertyTypes=true#code/JYWwDg9gTgLgBDAnmApnA3gZQMYAsUgCGAvnAGZQQhwDkSqAtGSgM4w0DcAUF-WgKosUUOAF4MXAJDAAJgC44bKMAB2Ac26SVhECgXopkssChttuhUtUbDAG0JmdexTGXrNxTdigpCMFPJwACJ+KJqE2DDAAG7OAEYQELa+KppgDiwA7tAyABIOuJau1pq2ENh+wBAqCgDa9lEwAK4yzipNIHHCADRwZerAza0K7Z3CALrcnjx8cILCALIOANZicDj4RAA881C9NEQsyzRwAD60uLIoJ+c0LLgQmTQAfNxc2NVscE1CUEtHmBQMCi6hYCl2-1W4gM0kCdweT26UnMzhhRhMjgstHujxoSMkknsmOcBxWeKkxHx3l8-jhOMRUgiUViCnhuPx6RYWRy+XurMurXJhPKlWqdRoAuu+0lNHGSM8QA) @see {@link SchemaOptions} diff --git a/source/screaming-snake-case.d.ts b/source/screaming-snake-case.d.ts index cdc520679..b907bf59c 100644 --- a/source/screaming-snake-case.d.ts +++ b/source/screaming-snake-case.d.ts @@ -16,6 +16,7 @@ const someVariable: ScreamingSnakeCase<'fooBar'> = 'FOO_BAR'; const someVariableNoSplitOnNumbers: ScreamingSnakeCase<'p2pNetwork', {splitOnNumbers: false}> = 'P2P_NETWORK'; ``` +[Playground Link](https://www.typescriptlang.org/play/?exactOptionalPropertyTypes=true#code/JYWwDg9gTgLgBDAnmApnA3gZQMZRQQxGADsBzTY-AaxQGF8BnFAXzgDMoIQ4ByJVALRsUDGDwDcAKEnYIxUXAZcUANXxRg+AEYAbFAC44OPIRLlKNekwA8PNhAgAhdTwB8cALy8AYgHlfAPqOAIIAShIycgpKIKrqmrooAHIQmGA6wDC+xEkAriBaKFAMhsYERGQU1HSMKLZgAExgSSgwAO7QVDwANBgM6ZnZeQVFJez4OkzM7l48AAoNcwFJAKIAKgDqvqEA0hFAA) @category Change case @category Template literal diff --git a/source/set-field-type.d.ts b/source/set-field-type.d.ts index 1f744820a..dc083b308 100644 --- a/source/set-field-type.d.ts +++ b/source/set-field-type.d.ts @@ -50,6 +50,7 @@ type MyModelApi2 = SetFieldType; //=> {a: [(number | null)?, number?]} ``` +[Playground Link](https://www.typescriptlang.org/play/?exactOptionalPropertyTypes=true#code/JYWwDg9gTgLgBDAnmApnA3gZRTAchAO1wFcAbUgQwCNSUARFFMAXzgDMoIQ4ByJVALRsUAZxg8A3ACgpAellxs8EagDGwNsFVxgBACZbROgnAomKUKBUQIIcKmgKEBBMpRooAdFP5oAgpbWAKIAHhTgtACMcAC8ijj4RG7UtAxMADzoFABccADariAOUHAAPnCu5AA0FcRFKCXllaQ1hcVlcMT6KJoEKHoAusw1PBSekTwdo54ATDwAfNLyMfMYOfltDR3NrXXFu-VQQzLycADyYDDAhBSkcCAQBppbABQABgD8bwCUOiIVEHgUBQDwAbv1vL44AErIhQuEwLQZrF4nhCCRyCl6IwwJl1nkXptGrVyN8PjVCXstk03GShiMxhNFnJZCs1rkCUTtrTybVDh8hkA) @category Object */ diff --git a/source/set-non-nullable.d.ts b/source/set-non-nullable.d.ts index e9616bdd2..1fb01a0e5 100644 --- a/source/set-non-nullable.d.ts +++ b/source/set-non-nullable.d.ts @@ -29,6 +29,7 @@ type AllNonNullable = SetNonNullable; // c?: boolean; // Can no longer be null, but is still optional. // } ``` +[Playground Link](https://www.typescriptlang.org/play/?exactOptionalPropertyTypes=true#code/JYWwDg9gTgLgBDAnmApnA3gZRTAchAO1wFcAbUgQwCNSUBfOAMyghDgHIlUBaRlAZxjsA3AChRXNADEIEOAF4MogJAUAXHALEQVFFDgAfTWVJjlVDYKjACAc0NxiBACYpGNlM7MBjAPwaqWVoKAgctcjE6cUk4TFYUfCITaloFWJxEknIUlAAeGQgAGg4qdgd2b3YAPjEAelqEZDQ4kATCLMoaNEV0UXq4VQ0tHT0wkzqG80sYazthOH6AYRDNOVJCW1HdRxc3D2cAOj7JvwCglBD5pZWCNY2ttHDSYqpieGB+OEFgcjgIMBgwEIFFIR36UQkTTgAEFyJlkl00tg8O0EbR8rIasdGqgYXDUdlET1sYNjCMoFcGstQrc4Os7A9jOQwZMLF8ZjZbJS4NTVnT7vptk5XO4CJ4WQNTnBAhBggRubzafTNoLHiYXm84B92T9SH8AUCCCCJXQgA) @category Object */ diff --git a/source/set-optional.d.ts b/source/set-optional.d.ts index 86dfbb324..6af5ee223 100644 --- a/source/set-optional.d.ts +++ b/source/set-optional.d.ts @@ -24,6 +24,7 @@ type SomeOptional = SetOptional; // c?: boolean; // Is now optional. // } ``` +[Playground Link](https://www.typescriptlang.org/play/?exactOptionalPropertyTypes=true#code/JYWwDg9gTgLgBDAnmApnA3gZRTA8mGYCAOwEMAbAXzgDMoIQ4ByJVAWhpQGcYmBuAFADWaAGIQIcALwYBASFIAuOMQCuIAEYooguRoD8ynlGDEA5roDGyjRPIpSxQZSEi4mBinyESFae5xvIjJyAB5xCAAaZg0mOAAfZksmAD5BAHp0hGQ0DxAvAmC-GXQBTLgFZTVNbQysvUM4Y1MLOHKAdVIuOAooBwATRDgIQt9yHuJ+psJyceAuADoy+stG2wh7Rz42rIBJbuIIAHdh0ZCl8sogA) @category Object */ diff --git a/source/set-parameter-type.d.ts b/source/set-parameter-type.d.ts index d84e9647d..9e1a22407 100644 --- a/source/set-parameter-type.d.ts +++ b/source/set-parameter-type.d.ts @@ -70,6 +70,7 @@ Note: type Fn = SetParameterType; //=> (a: string) => number; ``` + [Playground Link](https://www.typescriptlang.org/play/?exactOptionalPropertyTypes=true#code/JYWwDg9gTgLgBDAnmApnA3gZRTACgQynxBxSgBVkUBfOAMyghDgHIlUBaOlAZxhYDcAKCEBjCADs+9CXAC8cABT4AXHAkBXEACMyASnkA+OPmEB6M3ON0Ja5Ws079R9Vt1RhQgJAW4AdTRRAAt8CQBzNHY0CDo4AAN8OIQIeL4oYHC4gBo4bQ14KBwNKFkouGAeOD5gABsa+Md3OIA6ITKAMVkFbDxCYlIKKgAeKJiZHPQABjU0jLDqQ2EfS2N7Kph08IMrVycPIA) Use-case: - Define a wrapped function that receives something different while returning the same type. @@ -107,6 +108,7 @@ type HandleLog = SetParameterType; //=> (data: Data, message: string, ...arguments_: string[]) => void; ``` +[Playground Link](https://www.typescriptlang.org/play/?exactOptionalPropertyTypes=true#code/JYWwDg9gTgLgBDAnmApnA3gZRTACgQynxBxSgBVkUBfOAMyghDgHIlUBaOlAZxhYDcAKCHs0mAK4BjKbx4ARfDHxwAvBh7TZPHgC4EUCSgFwAbvgA2R-QDsJIAEZlqwsXACiURlEXK1GrTl9OkseYzgyb30+KGAbAHMXUSo4XxV1SRk5NLgAHw8vaDThZNQ4AAl8GwATCxQAWTl8eLR1AApqpXx9NIAaOBIdZpRomFiE-oA6acJ4+xQbGB4AfX0qxABtAF0ASjUAPjMIYGqSt0qauoB5AGt-bDxCYlIKKgAeC9qGppb+9AAGfSZbQKLomACM+hYEBuLGo+2EAHpEapDh0ukDAjo+gMfiNWDCWFMZlA5iRFis1jZNrsDkcTiVkXAAII2CAwAAWZDgAHd8IgEBA4NUUHQ4mhOWgwE8SDAyDxBXAoCgwBZ8LJJqU0J86p5vPccAQiLKyJRUB8ql9GkNfnANp1lPo9UUuv1BjxhlDItAWFsEUJkai4OjHQVvDj3Z7WN6oES4NNJrN5hTVnB1ts9kHTMdTiImQBhDlVFpwHhxeJ1ODS40vBBUTXnS11ADqhBsBseNblr3NOu+NpQf0hrD5UBscP9gbRDu6qVduIHUNH4+JidJyaWqfTtKzOcZiLgheLaGVfCrMtrYk1AYPrYFw4AkjYwBJ4HQJBYLOeu9yr1qKk2KAADIQPEHZGs83ZmigFqXP2Hq2vaGJzsobp4lCFigXGCZJuSm6jOM8TbH6SIotOyERuhrCYfE2EkmSCz4aWYzlhmdLZgyea3vycAAEz6E+L7wKe8DVpBv4pA4ApXA4ABWKBSPAcQigAHg2KR9iB8S8eBF5Qe8fbWghg4YPxzGEfCpFBiGs6UYu5nlquuGMZSDkJGxu4MkAA) @category Function */ diff --git a/source/set-readonly.d.ts b/source/set-readonly.d.ts index 39d58d364..a81a0158d 100644 --- a/source/set-readonly.d.ts +++ b/source/set-readonly.d.ts @@ -24,6 +24,7 @@ type SomeReadonly = SetReadonly; // readonly c: boolean; // Is now readonly. // } ``` +[Playground Link](https://www.typescriptlang.org/play/?exactOptionalPropertyTypes=true#code/JYWwDg9gTgLgBDAnmApnA3gZRTASigQwBMIA7AG0QF84AzKCEOAciVQFpaUBnGZgbgBQgtmgBiECHAC8GQQEgCALjikAriABGKKEPlRCJCojiaVvKMFIBzPQGMVmyeUKkhVYaLiZGKfMTJKGW8cfyNKAB4JCAAaFk1mOAAfFjtmAD4hAHoshGQ0HxA-Q0CTWXRBHLhFFXUtHWzc-RLjU3MYSxt+OCqAdQJuOAJyA2ITUfCTAlIiOF5gcnI4YG4AOkqmidK4B1NnV26qgElB0ggAdzgt43WqqiA) @category Object */ diff --git a/source/set-required-deep.d.ts b/source/set-required-deep.d.ts index bdf43a38c..49ad51d21 100644 --- a/source/set-required-deep.d.ts +++ b/source/set-required-deep.d.ts @@ -37,6 +37,7 @@ type SomeRequiredDeep = SetRequiredDeep; type ArrayExample = SetRequiredDeep<{a: [number?, number?, number?]}, 'a.0' | 'a.1'>; //=> {a: [number, number, number?]} ``` +[Playground Link](https://www.typescriptlang.org/play/?exactOptionalPropertyTypes=true#code/JYWwDg9gTgLgBDAnmApnA3gZRTASigRwFdgoUATAERRTAF84AzKCEOAciVQFpGUBnGOwDcAKFFc0AMQgQ4AXgyiAkAEMA-AC44AOyIgARiihjlBrXEFRgOgOamAxhfQrl5C3sPGVdANoBdUTpxSThMVhR8YlIKaloFMJwokjIqGjAAHhkIABoOVXY4AB84AAMHADoAEnRPIyg6CvJSgD4xAHp2+RalTrg1bTrjYTg+gEl+XQgAdzgyaNTRPrMLKxt7Jfb+p20XZbdB-XqR8cmdGbnCFIpN-r9-Dq3g2+x4flQHYEZgBzgbch+Aj+OjgqhBqigUFUiAQciMlwWFAqEmQaAAgpDoQBRAAeqnAABs0IpXskYmlaBl0KptL4hlB1Hl6YzdEdjOp-HQ8uxVBUAAyFEo8ioARnYbU23QwNLgdLZUCZ8sVXgZnKAA) @category Object */ diff --git a/source/set-required.d.ts b/source/set-required.d.ts index 4a6b2fba5..908307150 100644 --- a/source/set-required.d.ts +++ b/source/set-required.d.ts @@ -31,6 +31,7 @@ type SomeRequired = SetRequired; type ArrayExample = SetRequired<[number?, number?, number?], 0 | 1>; //=> [number, number, number?] ``` +[Playground Link](https://www.typescriptlang.org/play/?exactOptionalPropertyTypes=true#code/JYWwDg9gTgLgBDAnmApnA3gZRTASigRwFdgoUATAXzgDMoIQ4ByJVAWhpQGcYmBuAFADWaAGIQIcALwYBASACGAfgBccAHZEQAIxRRBc7Wp5Rg6gOYGAxqrjaJAGxQL1gykJFxMDFPmKkKaS8cPxIycgAecQgAGmZtJjgAH2YrJgA+QQB6LIRkNG8QX0IwwJl0ARy4RVtNHT1s3MNjGFMLPjgqgHUFLjgFBzIFckQ4Mn9w-vVyOB5gBwc4YC4AOkqmqzV7CCcXDqqAST71CAB3MZKA8jWq93Xg+C5UK2AaYCsl6ffuT6n+qCgClGMEkuguEwoa08AEEAUCAKIADwU4CcQWweEu4QiAG06rooEo4vi9ESNFoCUoALpxAAMyTgAEZMuspOk4HiKXpiVyoDz6oSqUA) @category Object */ diff --git a/source/set-return-type.d.ts b/source/set-return-type.d.ts index 5f079d631..946304e43 100644 --- a/source/set-return-type.d.ts +++ b/source/set-return-type.d.ts @@ -14,6 +14,7 @@ type MyFunctionThatCanThrow = (foo: string, bar: number) => boolean; type MyWrappedFunction = SetReturnType | undefined>; //=> (foo: string, bar: number) => boolean | undefined; ``` +[Playground Link](https://www.typescriptlang.org/play/?exactOptionalPropertyTypes=true#code/JYWwDg9gTgLgBDAnmApnA3gZRTASjgVygDsAVZFAXzgDMoIQ4ByJVAWhpQGcYmBuAFADWaALKIAYgWIBjGMAhkAFgEMYAYRXL6AdzgBeOAAoaECAC44PKMGIBzADRwARiqiXiBEM5RQAlAYAfC5mADYoWoLCFHDiAOpQKmCoACZSsvKKBnDYeIQk5KgAPOLpcgrKapraEDpO+DBEZBQlktLliqSqGlpdusEAPnDSKSg0tigpgYIA9DP6wSZmlta2ji5uHl4+-kEhEOFacEMjYxMpfEA) @category Function */ diff --git a/source/shared-union-fields-deep.d.ts b/source/shared-union-fields-deep.d.ts index ca39b67f9..0d355c7ca 100644 --- a/source/shared-union-fields-deep.d.ts +++ b/source/shared-union-fields-deep.d.ts @@ -80,6 +80,7 @@ function displayPetInfoWithSharedUnionFieldsDeep(petInfo: SharedUnionFieldsDeep< console.log('type: ', petInfo.type); } ``` +[Playground Link](https://www.typescriptlang.org/play/?exactOptionalPropertyTypes=true#code/JYWwDg9gTgLgBDAnmApnA3gZQBYEMooAmAqgHbASkBiwKANoQM4AiKKYAvnAGZQQhwA5ElQBabikYxBAbgBQckWgDCueAF4McgJDBS3CAC4t27aVwgUxqVD0BzeaaXHBAYzWyd29zAAqyKzgbe0cOeTCFJThmCDs4TXQdPQNjRNNzS2sYW1IHL2chQljPUyK7f1QsnLztCIi5bgBXUlcYClI4QmBGMDpcRAAFFBgASX0IAApUUfHjCdV4AB9o2IBKAG1BZIhBAF1VkwB6Q4QAiG44abGDeIA+HWOjk7MLQODcx0ftArcPT+efBU3tkQnBHgA5NiEUjCODuAhwXAAIwgjXgMGw3R4tAYABo4EiUO5Gow0MBpIw4KQIPBcHD+CBKJdhnBttj6IQAHQPE5cZZpL4ZYHVf5wb4BFxlEpfMpAqqgiFQmHweFoZGo9GYyncHGEfGE4mk1kUqk0xH0kCMjrTVnjdkMbnaR4cBROk5XO1RLGufi9FAAD0RpEIcDwADc0Ix+GhSFC6JJtbrGK6faQo-HOXRYhNBEKXPiPQZOULVo5U+mUJns8IJUIC8NrhBOUpS3IXQ1mq12p1ur1+kMZgYAOrk7A4fBEMjtGgclhsMBTBuzODjggkciUGcMOfsAA8Czgyxidlum22ewOApOSnOzMHEDuPKeYrzQRBHyf4sqQh8gkPhWKUV2zdO9G1OVBWUpRhQD9IMQ1ceN8BTSgKyrOwc1fQR63vYtXlbbwUIgDMs3Qmtvyw0DxmbAJWw4IA) @see {@link SharedUnionFields} diff --git a/source/shared-union-fields.d.ts b/source/shared-union-fields.d.ts index b5f75fd24..8dd4208c1 100644 --- a/source/shared-union-fields.d.ts +++ b/source/shared-union-fields.d.ts @@ -58,6 +58,7 @@ function displayPetInfoWithSharedUnionFields(petInfo: SharedUnionFields; // }; // }; ``` +[Playground Link](https://www.typescriptlang.org/play/?exactOptionalPropertyTypes=true#code/JYWwDg9gTgLgBDAnmApnA3gZVGANsAM0QBEUUwBfOAqCEOAciVQFoCUBnGBgbgCg+zNAAUIHYDGAQAdgA04AXgx8AkLhQEYALjjSAriABGKKPxVRgAcwAW23QeOm+FfoOQixEqdICai5SowEGA6+kYmZoYQMEEgoQ4Rzq5CcMK0qLDAnACM-uiq1ihWtvHhTiqQ4pIyOqJV3j78LgIpacEmkpwATHmqAO7AACYw1qWOZpVeName1XJNye6p6R1ZHP5tGZ0cuQBky+2Z3fwA9CdwAJLScIgQelBwKIMS0AA0cNYQAG4mwNKWcG+JjgAANNhwQXABrhcHAOJ8+ghCtQIDCIAN-lo+GdsedWisjuslJtVjk4PsSYSuotUHBsOB8ERSORKdt-PS8IQSGQwAAeVlrPYHLZrLoAPlO5wAQnp4IQoVAAIZgVCDOB-Ok4Rnc8jvT4-Cz-QEG0Ec7XMsACziQ6Gw+HouCK6i4RUxFDSJ6AwwAKxQAGN4AMRo6YUi0GACdssTizpqGVyLVaicpYypCsU7GFxri4CoBsNRvYypLc5M5jp8qnAsExokq1EYnRa04q+pNM2SypzBmOzmVM1Yy4gA) @example ``` @@ -102,6 +103,7 @@ type SimplifyDeepProperties = SimplifyDeep; ``` +[Playground Link](https://www.typescriptlang.org/play/?exactOptionalPropertyTypes=true#code/JYWwDg9gTgLgBDAnmApnA3gZVGANsAM0QF84CoIQ4ByJVAWgJQGcZqBuAKE7rQAUIzYDGAQAdnwphmcALwZOASBgQwALjhiAriABGKKF0W4UBGBu16DXYlx7I02AF4pJqmfPRKA7sAAmMAAWFjr6hkqBKMAA5oHmmqHWnLbcAPSpcACSYnCIEFpQcCh+wtAANHCBEABuBsBi0XA1BnAABm7SrXC+uLhwzFXecACGZLjDMDAoYsVNugBWKADG8L5BI70IkXBgUgYiLAB09qhwHR5w2OD4RAA8AkIi4udwAGSXwC7nAHzsQA) Sometimes it is desired to pass a value as a function argument that has a different type. At first inspection it may seem assignable, and then you discover it is not because the `value`'s type definition was defined as an interface. In the following example, `fn` requires an argument of type `Record`. If the value is defined as a literal, then it is assignable. And if the `value` is defined as type using the `Simplify` utility the value is assignable. But if the `value` is defined as an interface, it is not assignable because the interface is not sealed and elsewhere a non-string property could be added to the interface. @@ -51,6 +52,7 @@ fn(someType); // Good: type is sealed fn(someInterface); // Error: Index signature for type 'string' is missing in type 'someInterface'. Because `interface` can be re-opened fn(someInterface as Simplify); // Good: transform an `interface` into a `type` ``` +[Playground Link](https://www.typescriptlang.org/play/?exactOptionalPropertyTypes=true#code/JYWwDg9gTgLgBDAnmApnA3gZVGANsAM0QF84CoIQ4ByJVAWgJQGcZqBuAKE+ADsYUUAgEMAxmkyUUASX6CR4jJwCQBCBABccXgFcQAI0Fdl+4VAD8W1lD4BzY6YBeW3QcFwAPnB28AJigI+FF8uYm46CSkAFWQ0AF4lVXUXPUMoBzNLOGs7DOdtVPcvH39A3mDQrk5RCF5WOHwBKGFcOAT0NU04AEYAJgBmABo4UygtagALFFxcCGphpy0AFgBWADZiLhq6+GZo2K1JEBQY1DaG4CaWrdr6vePZJoUUQ6lH+TF4i6vcKv9RXBmNAEHyiGDAWpkXgACgg+gAVigwVoAEpI6C+AA8OV4tmGPgA1rwIAB3XgAPgAlFoAG4QYAhbgEGGNQQtSnsOAAei5cAA4upfFpWc1WnDEWCELE4MBmNkUC1gpxmdD7idYhzubyBRAhVKzrL5YrfJweXAAAIwZj0FAAD1QYJtUAoUGVMLV7yEn01ZoAos7oFpZP5bdlgLZeMIYDooMDoPq0NQcbZqDK5SBZcw7DLeAmaB65F7xNQAHRwABCSOEOmYaAABnwnp863BRMJc4Y4LH6BBUOUTSqC03FMI5dhwPgiJijjJC88qZyzTq9TBmnU1FAqO24A2582czAIHBhDuInWgA) @link https://github.com/microsoft/TypeScript/issues/15300 @see {@link SimplifyDeep} diff --git a/source/single-key-object.d.ts b/source/single-key-object.d.ts index 34d4ad146..82cb2d8c5 100644 --- a/source/single-key-object.d.ts +++ b/source/single-key-object.d.ts @@ -17,6 +17,7 @@ someFunction({value: true}); someFunction({value: true, otherKey: true}); // Error: Argument of type '{value: boolean; otherKey: boolean}' is not assignable to parameter of type 'never'.ts(2345) ``` +[Playground Link](https://www.typescriptlang.org/play/?exactOptionalPropertyTypes=true#code/JYWwDg9gTgLgBDAnmApnA3gZWAOwOYA2KA0iogPIBGAVigMYwC+cAZlBCHAORKoC0LFAGcYXANwAoCQBN6BAIZQ0LAK44GwCDjhCOKAGJqNWgDwAVAHwAKMIvkgUMFFABccbPiKkKNejHMWAJRuAG4QwNKSEroOhuowmjhW6CHyBCoobjBQGYyBUQD0BXAAAjBCfCgAHqgMlVDsUNF6ccZJKWkZWTkoADRwEDAAFs7e3bn5EkVwAKIN0G4AglB4Kg448BAsCMhoXB3pmXCUEBBE8jhiA8OjZG4nZygXjFxwwEJwOINw8kJCwHgcPJKEQEBA4LYoPZHM4BtteHscCgQs4uAA6cpWABMAGYACwAVkCQA) @category Object */ diff --git a/source/snake-case.d.ts b/source/snake-case.d.ts index e7314f8f1..82e27aa25 100644 --- a/source/snake-case.d.ts +++ b/source/snake-case.d.ts @@ -35,6 +35,7 @@ const dbResult: SnakeCasedProperties = { foo: 123 }; ``` +[Playground Link](https://www.typescriptlang.org/play/?exactOptionalPropertyTypes=true#code/JYWwDg9gTgLgBDAnmApnA3gZQHYEMDWKAwrgM4oC+cAZlBCHAORKoC01KpMjA3AFB8A9ILiZQYADYoBAYwjYucUvRQA1XFGC4ARlIBcovIRLkAPI2oQIAIQ2MAfHAC8TSxAD62u-zkL42CExJYBgAeWwAOQBXEG0UKFIDHAJiMhRzMAAmMAiUGAB3aHwHZyYssHdsPMKoYp95RVJgsMiYuISko1SzRnLcgqLGABoMJokQ8OjY+MSEKCjKRxde90z3CqqB2t4BYTgAQQATADdcbBkUQ4EWNGTjNMOABTpUWGBOUwAVJYw+AEgANoAaTgwGwcEIiAg1DgnzgZEMKRM6SB9gAugZPsC0XwKPw+GCYPFqLgLnAALIQQ4oCTPCBgUi-P7AUgACVwYDAiAM2isUjO-D+1CiEgkADFcCBgBJEBFJSgDFxNNgAOaCtwGbBteL8CiyBrwQ7aABKnBFME6SIedNeMHepFMlOptJepB+6H+jBZ7gAFhyuYwDDB5ighp7haL3CSpTLKvLA0wSFAJLhRFKYD7hv8NXAAIyZADMuJ4QA) @category Change case @category Template literal diff --git a/source/snake-cased-properties-deep.d.ts b/source/snake-cased-properties-deep.d.ts index b12c962dc..5341ba76c 100644 --- a/source/snake-cased-properties-deep.d.ts +++ b/source/snake-cased-properties-deep.d.ts @@ -52,6 +52,7 @@ const splitOnNumbers: SnakeCasedPropertiesDeep<{line1: { line2: [{ line3: string }, }; ``` +[Playground Link](https://www.typescriptlang.org/play/?exactOptionalPropertyTypes=true#code/JYWwDg9gTgLgBDAnmApnA3gZQHYEMDWKAwrgM4oAmAClBKrMCqQCIopgC+cAZrSHAHIkqALTcmMAQG4AUDODYYKKN1wBjNAFVyUDDICQAVx0BJCgC442QyABGy2UZ0A5XCBSXSMKAoDmsjjkFJRV1LR0AdWAYAAsAMR8UbApSPSdlE2xuCEttBwNjZQTGZNJcnQBtAF0AuTUIbC84KCZDABsYSxwCYjJKGjplGEYWNjAAHjyoKNjipJSAPjgAXjTCqAB9BWzLdAN0zeALOABGABp99Y28d0sBABUIEAEL-Q5Xq94SlMsK-b39ICrkdLAAmV5AnTXNweQQAKWUUEQL3273++wOW2OAGYIZibrCBJgwMBCCjAWj9FULhxZDJ6o14KQwG1ogB5bDOGz2KBlODdQgkcjUWj0YZMVjscboVnYFAnXZwWUoUG-dBKhQobGebx+OAcKr694YZmsmAcrl2ZR87yGFAcJarAHKjYKtL6F2quB-QH6AG+l3awReHzYXzkikQ6kGNG0oA) @category Change case @category Template literal diff --git a/source/snake-cased-properties.d.ts b/source/snake-cased-properties.d.ts index 78c677cd6..f6435af8b 100644 --- a/source/snake-cased-properties.d.ts +++ b/source/snake-cased-properties.d.ts @@ -29,6 +29,7 @@ const splitOnNumbers: SnakeCasedProperties<{line1: string}, {splitOnNumbers: tru 'line_1': 'string', }; ``` +[Playground Link](https://www.typescriptlang.org/play/?exactOptionalPropertyTypes=true#code/JYWwDg9gTgLgBDAnmApnA3gZQHYEMDWKAwrgM4oAmAClBKrMCqQL5wBmtIcA5EqgLRsmMbgG4AUOODYYKKG1wBjNAFVyUDOICQAV3UBJCgC442HSABGcibvUA5XCBQnSMKNIDmE5pMURsrnBQTDoANjAmOATEZJQ0dHIwjKQAPGpyAHxwALyatnIA+sDGcACMADTaeoV4TibcACoQINyVzBLifgHwpGChwDAA8th25lZQpJF4hCTk1LT0SUwp6P3YKKUubp7M5Ri9-UMjY3KTCFA6KMxZueja3GsoBaXc9a7u2B6t4u1AA) @category Change case @category Template literal diff --git a/source/split-on-rest-element.d.ts b/source/split-on-rest-element.d.ts index 251b27055..efcbd4b60 100644 --- a/source/split-on-rest-element.d.ts +++ b/source/split-on-rest-element.d.ts @@ -55,6 +55,7 @@ type T4 = SplitOnRestElement<[number, string?], {preserveOptionalModifier: false type T5 = SplitOnRestElement; //=> readonly [[string], number[], []] or readonly [[string | undefined], number[], []] ``` +[Playground Link](https://www.typescriptlang.org/play/?exactOptionalPropertyTypes=true#code/JYWwDg9gTgLgBDAnmApnA3gZTAG2DAeQDsAlFAZxgFEcUQUiYBfOAMyghDgHIlUBaVhRjcA3AChxfNABUAjHAC8cbHkKlhNOgxgAeANpEAriABGKKABo4AOjuUowIgHN9AXWumIEWgEMibgB8EgD0IYqBcPqGJuZQHnAOTq4J+l4+KP5ubpLScDIATEoquPjEZJRa9Iy6UJkAJhBEOIhRdjbpfkTu1kkuQaHhkXW+jc2t0Qmdmd2pfc7ZuciyAMzFqmUalbTVejFmFr0wji4A-APiYRFR+3FHJ87n1j1Ri1LL+QAs66XqFdQ7HQGYwHKyJY7JJ4YMB1cgWABuKAIYBgwCavhwAFkIPVgKxgBYAFxsDFwpjBS5DG4gu7gh6pBluODQamxQ505JwAA+cCMRHqKHxRBQ9QZzzeeRkAFYfmpyppATURmMWlF5qdrO0aRZ3Al0DCKAikSi0UQMdjcfiiSScGSKVdhg0mqrovMEtqoC9dcyoHBlc6Jvp5tzefzBU4Re62Z7GUA) @see {@link ExtractRestElement} @see {@link ExcludeRestElement} diff --git a/source/split.d.ts b/source/split.d.ts index 7cc63b22d..0b3724bf8 100644 --- a/source/split.d.ts +++ b/source/split.d.ts @@ -30,6 +30,7 @@ export type SplitOptions = { type Example4 = Split<'foobarbaz', `b${string}`, {strictLiteralChecks: true}>; //=> string[] ``` + [Playground Link](https://www.typescriptlang.org/play/?exactOptionalPropertyTypes=true#code/JYWwDg9gTgLgBDAnmApnA3gZTAG2DAXzgDMoIQ4ByJVAWmJQGcZKBuAKHZrQFEAPAIbgcKAIxwAvHGx4YAHgAGxCBAB0AEnTMowAHYBzAqoBGAqAoA0VVZStaYOgMYwAMvhRQBOAMIALFI4A1owAXCRejCgEAHwcAPRxEtFwANqUyhC2cNp6+laUplCUALqc3HD8QrgoAEyS0rj4ihka9joGBJbWWW3Azm4wHl5+AcFhDgCuUbHsCUnZDrkppVzIvILCKADM9TJN6SqFpgBeWQrGmjkdXb397p4+-kGh4TiRMfGJyWkZWZRF+VOK3KlU2ABZdo15AcIEcBKcrOdLotrnYcndBg8Rs9xlAph9Zl8Fu19MsgA) */ strictLiteralChecks?: boolean; }; @@ -55,6 +56,7 @@ let array: Item[]; array = split(items, ','); ``` +[Playground Link](https://www.typescriptlang.org/play/?exactOptionalPropertyTypes=true#code/JYWwDg9gTgLgBDAnmApnA3gZTAG2DAXzgDMoIQ4ByJVAWmJQGcZKBuAKHYBMUBjHAIZQ0xAK4A7XjGARxcRrnwAeTHBQAPGCnFdG8mFGDiA5gBo4AETWbtu-YZMA+ABTMHxgFxxM5xijBCAjDQXhYAlF7YeDAq5haOHOw0aACSWhQAvFTEEBCUcAA+VABGQvlFlKUAXuVUAO4COFx5HLyyzHD4KCB6WZQ5EKalUEMCVaYNTS3sOCjwQlACiF5p3QDaALqJC0twWQrRzl095pSmlGGsQA) @see {@link SplitOptions} diff --git a/source/spread.d.ts b/source/spread.d.ts index 70e2b057f..cc8f0367b 100644 --- a/source/spread.d.ts +++ b/source/spread.d.ts @@ -51,6 +51,7 @@ declare function baz(argument: FooBar): void; baz(fooBar); ``` +[Playground Link](https://www.typescriptlang.org/play/?exactOptionalPropertyTypes=true#code/JYWwDg9gTgLgBDAnmApnA3gZTFFBDAEwF84AzKCEOAciVQFpSUBnGagbgChO60AxCBDgBeDJwCQeAFxwAdgFcQAIxRQu4pQH4ZrKMFkBzLkS49kaAEJ4oIsRu1zFKtRIDGMpYIA2+WcdOuELKsZIK26NJwAIwANHBKMtQATNQmnIHB8ErW4e5keF7MKGkZIaSCVjai6AB0deUQcXU12VBpZqhwAhCVtti4hAA83XGVAHxcAPSTCOZdFTnVnNNwkjIKyqpTM-Y6MHqGcAA+jps2J-KyBCik+igE26t5nhA+eH7LM0Tc165e1mhSJdXDBgEF4ngAF4ACmsBkUKFkMBk3UqAEoZAA3CDAB7cbIwhro9hAA) @example ``` @@ -67,6 +68,7 @@ declare function baz(argument: FooBar): void; baz(fooBar); ``` +[Playground Link](https://www.typescriptlang.org/play/?exactOptionalPropertyTypes=true#code/JYWwDg9gTgLgBDAnmApnA3gZTFFBDAEwF84AzKCEOAciVQFpSUBnGagbgChOBjCAO1ZkIEOAF44AbQCMAGjgAmeQGYAulz6D4AIzxRxU6gBZq86gFZTNAGzV13TUNIiAQnoOSAdN+cR53z10oezo0ADFXdwlsXEIAHlCIUmE-BGQUJLgggD4uAHo8uAiIN30JAApWKGB+AHM4AB84fgBXEG0UKABKSVVuAhQeABs9NFIW-h4YYAEsvAAvcr1atpR+GAAuIsjurYA3CGACLk5dRd9SrvYgA) @category Object */ diff --git a/source/string-repeat.d.ts b/source/string-repeat.d.ts index 2ffa1e09b..29b34406d 100644 --- a/source/string-repeat.d.ts +++ b/source/string-repeat.d.ts @@ -21,6 +21,7 @@ stringRepeat('foo', 2); stringRepeat('=', 3); //=> '===' ``` +[Playground Link](https://www.typescriptlang.org/play/?exactOptionalPropertyTypes=true#code/JYWwDg9gTgLgBAbwMoysAdgcwEoFMy4CGMAvnAGZQQhwDkMAngQLTm4DOMtA3AFC8ATXAGMANoSi4KAV3TCYwCOjic0WPAWIAeXgEgAkujDT4uAB4xc6AexWoMmADR6AwhFmmLVm3HTSQAEa4ULwAfAAUGMYwAFxwhtGOcMLu6LFwbh4AlHEoajj4RDBaCSZJmWmhfLwA9DVwACoAFlKSMNJQyowEcMC2MC1w5oTydvlwosCWUISiSegQ8ABW0pxwAAaqDusAdPxb6oXE4bTkEBC0SQBMWXx1ALyhdGcQL7T79oeaMCf3l3AAZlutRqjzo9whtCAA) @category String @category Template literal diff --git a/source/string-slice.d.ts b/source/string-slice.d.ts index 68969423f..0a7e2051e 100644 --- a/source/string-slice.d.ts +++ b/source/string-slice.d.ts @@ -23,6 +23,7 @@ type C = StringSlice<'abcde', 0, -1>; type D = StringSlice<'abcde', -2, -1>; //=> 'd' ``` +[Playground Link](https://www.typescriptlang.org/play/?exactOptionalPropertyTypes=true#code/JYWwDg9gTgLgBDAnmApnA3gZRlYA7Ac0wBtgBjFAXzgDMoIQ4ByJVAWhpQGcYmBuAFADWaAIJwAvHGy5CJcigA8TAIYAjMgBMUTADRwADPoBMAPkEB6CxNPN1TISLgAhSdJz4ipCsvVad+gCM5gJWNswa2g7CyGgAwm4ynvI+qpEBhvpswZbWtmla0U4AIokect5KBVFZxlk5oXnMmkxAA) @category String */ diff --git a/source/stringified.d.ts b/source/stringified.d.ts index 4ffd30ec5..c812f3267 100644 --- a/source/stringified.d.ts +++ b/source/stringified.d.ts @@ -17,6 +17,7 @@ const carForm: Stringified = { speed: '101' }; ``` +[Playground Link](https://www.typescriptlang.org/play/?exactOptionalPropertyTypes=true#code/JYWwDg9gTgLgBDAnmApnA3gZRlYA7Ac2ADNgUATAXzmKghDgHIlUBaYlAZxkYG4AofizQBhAIZQ4AXgz8AkCAjkUAGwBccbrkIC5nVBQ14AriABGKKAMqCAxhDzc4tiQDFoIDdm1FSFADziUAB80rIKSqoajO4QjAA08voohkwAjAAMaYz8lLxAA) @category Object */ diff --git a/source/structured-cloneable.d.ts b/source/structured-cloneable.d.ts index ee1e973d3..1fb93f1ce 100644 --- a/source/structured-cloneable.d.ts +++ b/source/structured-cloneable.d.ts @@ -81,6 +81,7 @@ const good = { const clonedGood = structuredClone(good); //=> {number: number; date: Date; map: Map} ``` +[Playground Link](https://www.typescriptlang.org/play/?exactOptionalPropertyTypes=true#code/JYWwDg9gTgLgBDAnmApnA3gZRlArgYxlyhQBMBhAGwgDsUBDAI0pQF84AzKCEOAciSoAtBxQBnGHwDcAKBn5K9MWLjlcEnlSUr0rOfloS4KKNyhwAvBhkBIfOpg8AXHDoB3VQ82LlACgCUADS2APQhcAACMGJCKAAeqISxptAy7GL0MMBiHMDicNh4hMRkVLQMzCiy8obwAOYQEKSW1jY0uCCMJi4AzME2pJkoLu5wACJDAf0g9GAjKB4AsrMAPBJQwDR1ga4dXVAAfFNpcBlZOXkqhQREJBTUdEws1QY0RgrlpADijc1W6zcSvdyr4Gk1-LIwhYDhh2p1urt4VApHBBjBhuMhiiZnM4MswGscJttoj9gdWEA) @category Structured clone */ diff --git a/source/tagged-union.d.ts b/source/tagged-union.d.ts index bef155ecb..8be17a8af 100644 --- a/source/tagged-union.d.ts +++ b/source/tagged-union.d.ts @@ -40,6 +40,7 @@ type ManualEventMessage = | {type: 'PurchaseButtonPressed'; price: number; time: Date} | {type: 'NavigationStateChanged'; navigation?: string}; ``` +[Playground Link](https://www.typescriptlang.org/play/?exactOptionalPropertyTypes=true#code/JYWwDg9gTgLgBDAnmApnA3gFQIYHNcoAmAqgHbASkC+cAZlBCHAORKoC0tKAzjMwNwAoQWzQ58RADwAxYCgA2hbnBQAPGClJK4AJRQBjaIUm8owUrgA0ug0ZMwzF6wFdSAa1IQA7qQB8-uABeOHECEnJKSVZkFGZrWQUlX2EAehSQgAsxPDCyClI4ZxhgeWAkOCgiZ30eBCy4bBAIV3gIWjgAIwgSlCgweWwNOFIUIiIECDh9SsG0bAQc8dd8uC8yjLgQZ3li-rQQFBAO3u5rEGw3c1w6tENCfehbyn1gbhQAOhEYuABRADdNDAALI8bh4NDBUJSdCCACQAHlUKQfupeqRsPJiFB5AAuDBw2HObF40xXISw2HAQh40jOI69cmwgYWZzgkkOMlwqjkzAQfDyFAAIWw+jcgqKMEoADVXsAOiUyog8TCKX9ZR0BXiuhABdhSOTuXCAApE-QZbBvcUwSWkI2Vbhvan4ilgMw1Gl045QRnFA54gAiswN5IActg1bhBvkAMowWYAYXNFiIyoJ6IjUcoAH52Y5cMHBFRfEJBGk4AAJXpoV43OBgg4Ib7TFCzQirdbNeAwDI1ooKpCfURwIF61nyf6AkEO8FBOEAH2dsNEeOYiM0KI0UHRmOxAgJRNxdY5FkZVI99O9BOZuFZBFznNhVHnGGXLF5-KFIrFEul6v7iAEOA1W4OVNU6CAdRbahn3QV9mBNKAzQtIUf1te1HUA11gHdYZPQZBBQBQANZifWEF1gmIVzDDNikoWMEyTMJAPTYBI1o0gcyPPNuSAA) @category Utilities */ diff --git a/source/tagged.d.ts b/source/tagged.d.ts index c56090cb2..65a4b4368 100644 --- a/source/tagged.d.ts +++ b/source/tagged.d.ts @@ -53,6 +53,7 @@ getMoneyForAccount(2); // In this sense, the underlying base type is not hidden, which differentiates tagged types from opaque types in other languages. const accountNumber = createAccountNumber() + 2; ``` +[Playground Link](https://www.typescriptlang.org/play/?exactOptionalPropertyTypes=true#code/JYWwDg9gTgLgBDAnmApnA3gFQIYHNcoAmAvnAGZQQhwDkSqAtGSgM4w0DcAUF-WgIIBjQRACuAOxgA5USABGKKHAC8cHPiIAecbIVQANLSEiJ03YpoA+bnzjGxkgELYANtnGC0q9QULbzBkbCDjDObh4oVtxcZBKCMMAQ4nCCUCjYMCj2pjLyigAUAJQAXHbBOQEYXACQAPS1dixwiGIp7nAsKCiGgthswOK45JTU2HAABjp5UONw+TAAFmgShIouiANDtgqbCHi+hXDATa4uEADuRAB0NWkwolDJAExwfWUmkrl63MQ8q4JuNLkOIJJJwAgwACySRQiAAYtBspJ8thyp8AqUkWZpiV3iEwu5PNF6moFsc4OdgC4XCkqGAqWgWKJhKwWLFqYgbhDoeJYQioFj8ql0pksV8CoVCsSGo5RPBFuTzkk6IYFL1RJ0jvAFm8YBA4Ao4CgAB5gFzAQTAGDrOBgPqdQivE7JcZigKzPgAQi4JIAwlArRbTohDC1RLTRC5HeIIPBUZbVpJg3ANWh2q60aFXISULM3um3dNxjcSQABGAsBgm1DxKtQShQLjcmHwxGZ-JPKU8EkATVavWSrhY+tTew0joAbq5RKw4OaANZoRYoYBKFZrDaDQymfZEBDIFAlhoASSuh8MCqalOptPADI6zM8LDZkZtauwo4LmfFMzayUNqaOvmcBpLgkbYEokzukecDHskl4dCg4idBeSwpuIqxQOsuxyH0S4HkcTQxtqwCEImhjnGSggLHAhDAGQzBpJIwAZLOMC7o6fBNBQVBwBAdoAI4zvuqBNAMfHLko4RgXgrA3CIyFxt+lSqMKrGFnoRRwAA1HATwcEAA) @example ``` @@ -65,6 +66,7 @@ type SpecialCacheKey = Tagged; // You can also pass a union of tag names, so this is equivalent to the above, although it doesn't give you the ability to assign distinct metadata to each tag. type SpecialCacheKey2 = Tagged; ``` +[Playground Link](https://www.typescriptlang.org/play/?exactOptionalPropertyTypes=true#code/JYWwDg9gTgLgBDAnmApnA3gFQIYHNcoAmAvnAGZQQhwDkSqAtGSgM4w0DcAUFwPS9wAmhACucAMbYAdnGxgwAG0RwQIhTGCK0MPCwQRZCZGgBGykS2BTccAAY58RW3CgpU2GESUA6LvTQAqlAKcAC8cA4EhAA8bFBWuAA0tAEASgAyNAB83P5wAMqo4sDYCgDC2OIAFigA0ijK4ZFE0UEKyTSFKMWlFdV1DdncfALCYpIypSwGYNgsethwIlLAEDIQZAh4cFLYIKzJ0whVwHqncCgAjiLAAG6lKFLwMAYwNbImELcoyaVvorgqnBgPBCBBWFI6HBcHc0IhRMc0NgTMAFCDlC9ZPNgLgZIRThopOJ4PsdIQPItMShKkCdLhfHkuj1yjSBogAExhCJ4KKxGDxawdNKZOAAH1oTJKLP69UQQyAA) @category Type */ @@ -94,6 +96,7 @@ function parse>(it: T) { const x = stringify({ hello: 'world' }); const parsed = parse(x); // The type of `parsed` is { hello: string } ``` +[Playground Link](https://www.typescriptlang.org/play/?exactOptionalPropertyTypes=true#code/JYWwDg9gTgLgBDAnmApnA3gFQIYHNcoAmANHAOIow64Cyl2h2M2AvnAGZQQhwDkSqALTsUAZxi8A3AChpAtAClREAHYB5dgB5MAPjgBeONQKFN4qMBW5SvBQGU1AOV6ldM6ewCuKgMYxgqnDmlrjA7IjaOgAUwDAAXEYAlBjScHBQlJ5QKnD2TgB0wVZhiDEwydiiucrqWm7SLLJevv6BYNhQoijacCgAHjAoKoRVSqoamt4A1ioQAO4qOtGxCZjJ6Knpmdm5Do757Z0oZRVVFFR4dMyMzNo2ec46Mo3SPqricH0GQTAWxeFRdBwAAWKAANmCIAleHNoGDCLw4CxEjI3ioPocuoRvpjjn0UXAAPSEoyghDINAQdhwAAGuMINLgwCqQNBEKhPz+uCRQA) @category Type */ @@ -125,6 +128,7 @@ const money = moneyByAccountType.SAVINGS; // TS error: Property 'SAVINGS' does n // @ts-expect-error type WontWork = UnwrapTagged; ``` +[Playground Link](https://www.typescriptlang.org/play/?exactOptionalPropertyTypes=true#code/JYWwDg9gTgLgBDAnmApnA3gFQIYHNcoAmANHAKoB2A7lNmDvkQL5wBmUEIcA5EqgLSsUAZxjcA3AChJfNAEEAxgogBXCjEzI0AXjgMChADzcAynIBqASQByAcRPc4AHx4BhABIBRVwGkbt7lJuRWU1DS1uAD4pSWUKUTgQCAoURAAhRBDVdU1UAC44ACUUZSgjSho6fSJDLLDclEjSChUQACMUKEi4XXRJAEgzKzsTAoBOMeIBj28-OwKABgA6AEZJJhiAek24AHVgGAALVXgK2no8A1IjtFYIABt7iCpgClw4FAAPMCgRYWBknAqKp7oQEIcOFQ4NgEFoPlAOFAlrFkgkkilED1EslUhk6jktEshv4TOI4Ns9CZ4YiCgAFDioWCY0wWEmOQgQERwCgQeBfYCiaQUuQwGAocAwV7vGAQOBgbDCYTQijc5L8apg2QIWVnKqXIhA4CPOC0AVoGFazqI5EUgACMGE-C+qAUMCdCOgMjhu2SMB9UAA1ljdRdGEZRFApdEgA) @category Type */ @@ -209,6 +213,7 @@ type Person = { name: string; }; ``` +[Playground Link](https://www.typescriptlang.org/play/?exactOptionalPropertyTypes=true#code/JYWwDg9gTgLgBDAnmApnA3geTAQwI4CuKAvnAGZQQhwDkSqAtGSgM4w0DcAUF-WgIIBjQRAIA7GADkCIAEYoocALxxs+IgB4xM+VAA0tISPFSdCmgD5ufOEdESAQjgA2OMYLQq1hFFrP7DYXsYJ1d3FEtuLgB6aLgAFQALNAADeIgAaxQxFLhcKBwQFBgFOBdnCAB3FgRkuBFwYGdSmAg4ABNgMmYobJhgHBK4eRhKlGyEZFYDSuTenBqAInEMsSqxRbhKpuc4NZgAOjgAMWg4FAAPQrBmgxExFmB2lrqyCGcK7bEAczg2KAIghgBF6LAAXLwpglEsAfpgxJ5VLgfBp-rDvlZIahoej4pU2l5kZo0T9MTE4ulamgGmAmgoDDBkiw0HwajhemUPlUUO0EG15PUFvBWuccIJEnAIIzSgsqYg4IkcAA3Fl1FiFNDiZ5QZyIdGTVBHJIoeXstCyKUSlIk34AMgwcAA+o6IESUM6wXAVmtKmI4MQUgdyQk2sqIE9asAavJFUrgKIAohRFtRM5ebC2CgcLzcCwatK4It0lkNnl2RqSgFnMAsn8IEGbJIUJUkuj4YjvMSYFB0QYaK24QjIli0E2WzCfniCUj1L4bX2B98p8Pg5IqnKaByac0Srq-ih8oMWVMWAYWG0C28uV9ftsPuQcE0+fUqLTmkGyOIgfG-YJ5iUx0Xds4AACgASk9QCJ2+YD0C4ABIWJbBqJMCEFP1mRQO4hX1CgqDKP5u31KNCJ2TlPh5I4AAluRVRNkxAHB5X2QU2DgKC2wRZ8OMnfEDDcXk4w8OA6PVIN4N6YEoD9GgEUqSMfklIcyhqHiYIRbhiB4JDWxqO9djIR9dhFGk6X4-NklNDlPzEdoNQkcp5U6boFD6A1WCDJCAAEYBYBhLlQIF-KgSgoC4e42MZXF8WUep-xQNT23AlT2ObRcpyiJCqNcmg2X2OZziucBmklMhJTdA10Q-L9+ggX94rsExpDkBRwM9RqJGa3QMAQySQT9AAmFKOtMFqoE0nhnkEVxrJqn84G+YoAFk6pNU4oBGkCxWMTr-HaoImv8CDbAOxwXDcDxMopGE9LI0ySpYQEPDzT8PkQINFpgFaEUQdbNr-LMShGrrWrAsCrrgBwCGFG6UzEOgDHkQQcAIZk4GAeBFXzfk0AC6tBAxvdc2ZXlZTcOAUmB-xcj4Ty4h8vyApQIKFFCrhPu+tboE2gbwe0uIAE1k2Rv1UbQV1ZxElwiBqata2lKzsjocrJdaetwrqtjtuCEHFBUAGjypsbwIh3Stju186T+J7WBYV7dSDCL4Dko3upUbXDrGuAAGo4AGiH+DZP4njQfYsLgVD0NAgS-kSVN2jAr00d6QQQUeFV3JqN5FFQxQJZ8TPn0Y+Xkmof46sWxQY7j1B7flLNHhaC8pgbKEAAUFHPP0VDg+Cnk9TtfG0MaDA7qAu8xeCxA1T0bU0jggA) @category Type @deprecated Use {@link Tagged} instead @@ -247,6 +252,7 @@ type WontWork = UnwrapOpaque; // @ts-expect-error type WillWork = UnwrapOpaque>; // number ``` +[Playground Link](https://www.typescriptlang.org/play/?exactOptionalPropertyTypes=true#code/JYWwDg9gTgLgBDAnmApnA3geTAQwI4CuKANHAKoB2A7lDmNvkQL5wBmUEIcA5EqgLSsUAZxjcA3AChJfNAEEAxgogEKMACrI0AXjgNCKADzcAynIBqASQByAcRPc4AHx4BhABIBRVwGkbt7lJuRWVVDS1uAD4pSWUKUTgQCAoURAAhRBCVNU1UAC44ACUUZSgAE0NKGjp9IkMssNyUSNIKAhAAIxQoSLhddEkASDMrOxMCgE4J4iGPbz87AoAGADoARkkmGIB6bbgAdWAYAAsVeCraelwDUhO0VggAG0eIKmAKAHM4FAAPMCgRMJgMk4FQVI8yghjhwqHAcAgtN8oBwoCtYskEkkUog+olkqkMg0cloViN-CZxHBdnB1CYkSiCgAFDioWA40wWcmOMoQERwCgQeC-YCiaTUuQwGAocAwd5fGAQOC4YTCOEUfnJfi1NCyBCKi41a5EUHAZ5wWgitDw3XdFFo6kAARgwn4v1QChgruR0BkiP2yRg-qgAGtcQarowjKIoHLomK9mQgZ84TScB8PihIbq3mawSG9RB7XsnS63SVPbafbrDs8g6HdOHtYZ1GmMxU2p1ukEiTBrO0ulAotEqXsOwOgA) @category Type @deprecated Use {@link UnwrapTagged} instead diff --git a/source/trim.d.ts b/source/trim.d.ts index d995ffb9a..40573278a 100644 --- a/source/trim.d.ts +++ b/source/trim.d.ts @@ -20,6 +20,7 @@ import type {Trim} from 'type-fest'; type Example = Trim<' foo '> //=> 'foo' ``` +[Playground Link](https://www.typescriptlang.org/play/?exactOptionalPropertyTypes=true#code/JYWwDg9gTgLgBDAnmApnA3gFSqAvnAMyghDgHIlUBaAlAZxjIG4AoFytAUQA8BDcADZoAvHGygAPGUIQI5AHwsA9EuHzyBWWSA) @category String @category Template literal diff --git a/source/tuple-of.d.ts b/source/tuple-of.d.ts index e2d9e35f6..6b360909b 100644 --- a/source/tuple-of.d.ts +++ b/source/tuple-of.d.ts @@ -19,6 +19,7 @@ type Line = TupleOf<2, {x: number; y: number}>; type TicTacToeBoard = TupleOf<3, TupleOf<3, 'X' | 'O' | null>>; //=> [['X' | 'O' | null, 'X' | 'O' | null, 'X' | 'O' | null], ['X' | 'O' | null, 'X' | 'O' | null, 'X' | 'O' | null], ['X' | 'O' | null, 'X' | 'O' | null, 'X' | 'O' | null]] ``` +[Playground Link](https://www.typescriptlang.org/play/?exactOptionalPropertyTypes=true#code/JYWwDg9gTgLgBDAnmApnA3gFQK5gDYoDyAZgL5zFQQhwDkSqAtMSgM4y0DcAUNw2gCUA4gCE4AXjg58RYgB4AzABo4AO2wgARiigA+HgHoD43XADa6rTpWXtUGxrsBdXvzgAZYKrSTpBEnIATCroAB4AXGqOOpxwiJG2OqT63EYm5mEJ0VCx8VFWUKQhEfl2uVkFpC58yGiYwADGmACGTRAoIhDNUAAmElK4-vLKAzIBI7QAGrRwAD50hDPz6nh4uilppmZmU0sLeyt4Krtz+6eHx9OntIvn2KtOKjtX8zcH90d0L2fLH5d7bzuDyeJ1et1+q3+13BUUhXwBMMOTicQA) @example ``` @@ -32,6 +33,7 @@ type ZeroToFour = Range<0, 5>; type ThreeToEight = Range<3, 9>; //=> '3' | '4' | '5' | '6' | '7' | '8' ``` +[Playground Link](https://www.typescriptlang.org/play/?exactOptionalPropertyTypes=true#code/JYWwDg9gTgLgBDAnmApnA3gFQK5gDYoDyAZgL5zFQQhwDkSqAtMSgM4y0DcAUNw2gCUAhgDsA5igA8AZRhDYcFAA8YKEQBNWcEdhAAjFFAA0cAKIbFKtZu26DUAHxwAvGaUBjPNnVSA1ikQIYjgcfCJiSXN1BxN-QODQghIZOVgHBx4+ZDQALUMITAgAMQhsKBc4YXEpAAYTAFYM7gB6ZucnWhraOAAfOgBGbr7aACYhugBmcdoAFlpefhCACygUFELTYDEl+FcqiUkJkwBOJtb2yem53rp66YA2aYB2aYAOWiA) Note: If the specified length is the non-literal `number` type, the result will not be a tuple but a regular array. @@ -42,6 +44,7 @@ import type {TupleOf} from 'type-fest'; type StringArray = TupleOf; //=> string[] ``` +[Playground Link](https://www.typescriptlang.org/play/?exactOptionalPropertyTypes=true#code/JYWwDg9gTgLgBDAnmApnA3gFQK5gDYoDyAZgL5zFQQhwDkSqAtMSgM4y0DcAUNw2gGUYUYADsA5gEEoUAIaI4AXjg58RYgB5R2EACMUUADRx2IiQD4eAeiuLzJ4WPEBtALpA) Note: If the type for elements is not specified, it will default to `unknown`. @@ -52,6 +55,7 @@ import type {TupleOf} from 'type-fest'; type UnknownTriplet = TupleOf<3>; //=> [unknown, unknown, unknown] ``` +[Playground Link](https://www.typescriptlang.org/play/?exactOptionalPropertyTypes=true#code/JYWwDg9gTgLgBDAnmApnA3gFQK5gDYoDyAZgL5zFQQhwDkSqAtMSgM4y0DcAUNw2gFUAdgGshEAO5DMUYPhTwAvHBzySAHgDMAPh4B6PYu1wA2tlHipAGjjmxkoTbuWhAXSA) Note: If the specified length is negative, the result will be an empty tuple. @@ -62,6 +66,7 @@ import type {TupleOf} from 'type-fest'; type EmptyTuple = TupleOf<-3, string>; //=> [] ``` +[Playground Link](https://www.typescriptlang.org/play/?exactOptionalPropertyTypes=true#code/JYWwDg9gTgLgBDAnmApnA3gFQK5gDYoDyAZgL5zFQQhwDkSqAtMSgM4y0DcAUNw2gFFwSHPjQBeOKIIkAPIwDMAGjjsowAHYBzAHw8A9PvE64AbQC6QA) Note: If you need a readonly tuple, simply wrap this type with `Readonly`, for example, to create `readonly [number, number, number]` use `Readonly>`. diff --git a/source/tuple-to-object.d.ts b/source/tuple-to-object.d.ts index 8e5d59a25..4ea638858 100644 --- a/source/tuple-to-object.d.ts +++ b/source/tuple-to-object.d.ts @@ -35,6 +35,7 @@ type Example5 = TupleToObject<[number, string, ...boolean[]]>; type Example6 = TupleToObject<[x: number, y: number]>; //=> { 0: number; 1: number } ``` +[Playground Link](https://www.typescriptlang.org/play/?exactOptionalPropertyTypes=true#code/JYWwDg9gTgLgBDAnmApnA3gFQK5gDYqYQDyARgFYoDGMAvnAGZQQhwDkSqAtAygM4w2AbgBQIzmgCiADwCG4AgEY4AXjg58hEhWowAPAG0AdthCkUUADRwBUYEYDm10hAgFZRgLoA+UQHo-FW8MOAAGAC44EzMLIThFSNt7BziAJkiXNxQPOFoxAPVcAj44AHdgGAALOAgwGGAII1k8OHsAE2AqfnFkKTkFFFTVQs0iMkoaQ2jzKxsYO0cAfmdXdyNFn39A4PQwyOnY+MXE+eS047hMtdz8vzgAJWy2xrxEBCLuiTgZeU0AZmGGgIYx0kygTxeb2Mphm1iSS02IgCQRC4NkzyMrz2URhhzRGKxigu8IcNyRdwAco0uDAPnBZFAoLJECUHCh4PMPHwGNAQCg2q0jDAIIK2ihpDZgA4mrTwXweqhvv1NAAWQEfEETfQkgyI5E7OAGaT7XFQTwnBakvLkkbFMoVapy+AoAh8oXyr4-AYAVnVo20Wqmprhp0c1gAdJGrtkjLq9dsQkaTTEzcmZnAAD5zS2Zy6rGNxCI4lNxBLZ5JkgpAtB4WTmPAlBloIwQeBgOUWABu-IVfV+BAAbH7gQHdIZjcXYXBEGmLPGUbsiwcoKXZ1BckA) @category Array */ diff --git a/source/tuple-to-union.d.ts b/source/tuple-to-union.d.ts index e85edb35c..cafa5d45c 100644 --- a/source/tuple-to-union.d.ts +++ b/source/tuple-to-union.d.ts @@ -25,6 +25,7 @@ function verifyRequestBody(body: unknown): body is RequestBody { return typeof body === 'object' && body !== null && verifyDestination(deliverTo); } ``` +[Playground Link](https://www.typescriptlang.org/play/?exactOptionalPropertyTypes=true#code/JYWwDg9gTgLgBDAnmApnA3gFQK5gDYqYQCqAdsBKQL5wBmUEIcA5EqgLS0oDOMzA3AChBAY0q84AEx4xgpAIazxcALxwA2s3nMANCwBGuliOYBdOPO5wxpXkMFs0AERlzFFUqrg58hEuUoAHkcIWilXBSVbAD4hAHo4lWiWbTgAHwNmdONmYVpsUhEouAA3FChgWkQXXjcogAppWsiPAC44AoBrUggAd1IASnam2RbKOGArGtH3cfRBAEgoFBhsKE8Ruo9uADo5ETxsJsaI2c9LC1JEAaEqYUc4ACUUAEdsGQAhCElEL3mF6R4YBlKBEdrTLaUW72fKFYogyqIZ5vT7fRD1fRo9pdHr9IZwTE-CZWZHvXhfIn-GwSQHA8pELwYtEWKzyK4DHa0kFEIRLFZrTwhMKE34qMUsCD6ABWKCKWQAZPKCcyAITi0jYPB4OCK0rlREQsakE5A7kQG6CKhAA) Alternatively, you may use `typeof destinations[number]`. If `destinations` is a tuple, there is no difference. However if `destinations` is a string, the resulting type will the union of the characters in the string. Other types of `destinations` may result in a compile error. In comparison, TupleToUnion will return `never` if a tuple is not provided. @@ -46,6 +47,7 @@ const numberBool: { [n: number]: boolean } = { 1: true }; type NumberBool = typeof numberBool[number]; //=> boolean ``` +[Playground Link](https://www.typescriptlang.org/play/?exactOptionalPropertyTypes=true#code/MYewdgzgLgBAJgU2gSzAQys8EYF4YDaA5GkQDQxEBG5lwRAujGjqJFANwBQXUAngAcEMACJJM6TODwx+QkADN441BiyQCYAK4BbKggBODbgHoTuAHyVSMAD6UadukR5toMQwZAHUAcwAqgsL4YAgA7jAAyghQABTEpBTUtET0DACU3FxmMAACUBAAtAgAHkLAUMUGXga8QTAAotXefoFCMnIIih7NPmABQZq6+kam5lZtwkTRUAA80H2+FkQwABYsMGAgMDoYwKt+MKiIJTAQyL6SWgbCCt6y9UTaeoZEAHSyELEATACsAMwAdnSrmwsGeIwAQiAQAAbABcMAA3oQwIiIYYGIiqDDYQg0GAYABfGQogCMiKgBi0wiJWU6MAAcsNDNC4R0gt0MQY2bChi9RtlxjAcXD8WAgA) @category Array */ diff --git a/source/undefined-on-partial-deep.d.ts b/source/undefined-on-partial-deep.d.ts index 9e76d1fe9..4f522b299 100644 --- a/source/undefined-on-partial-deep.d.ts +++ b/source/undefined-on-partial-deep.d.ts @@ -40,6 +40,7 @@ const testSettingsB: UndefinedOnPartialDeep = { }, }; ``` +[Playground Link](https://www.typescriptlang.org/play/?exactOptionalPropertyTypes=true#code/JYWwDg9gTgLgBDAnmApnA3gVQHYBMUBmw2KuA8tgAoCGsw1ANgCIopgC+cBUEIcA5ElQBaAigDOMfgG4AULOIwUUAtQDGaAMooYMYgHNxGWQEgIYPRGwBBAFxxJUA3LMXgVgEIB+e9gCuIABGyi7ifoFkblb26KYmYRFRNvaBEBAMKNTYLvHhkZbY3ilpGVku7LLscrJqVpIIEjDaugbidnDNetiGcAC8xq4F7fwEafwANKbmBR72fniExKTjcAD0q3AAKsgommpOFnDKPFBwwARwAAYoAB7qMPnu2IyUPKiwiNuo4pdnRjBQPwoAB0pnWcAAAjBxMJbqg1DBYVATqYEo9ogNcokhvYAUDJiYsejCnMFkQSLgVuCvrt9sBDsdoGcLtc7gjiS83sokDSfn8EICUKZ2JMqvJath6kpJJ1WrM4Dh8OTSBQaHRGCw2AAeWXdcQAPj6A2mT2GowgEymSXl8yVS0paw2lxNnl+aiycGCDh0CAgV1tiwpv2wEAA7qCiUkYnE0Ul2niUATIzNSXaKVSnbGZm6PV7xD6YH7LgHlbhg2GIyLKtIgA) */ export type UndefinedOnPartialDeep = // Handle built-in type and function diff --git a/source/union-to-intersection.d.ts b/source/union-to-intersection.d.ts index 756a3631e..85c7a2bc4 100644 --- a/source/union-to-intersection.d.ts +++ b/source/union-to-intersection.d.ts @@ -12,6 +12,7 @@ type Union = {the(): void} | {great(arg: string): void} | {escape: boolean}; type Intersection = UnionToIntersection; //=> {the(): void; great(arg: string): void; escape: boolean}; ``` +[Playground Link](https://www.typescriptlang.org/play/?exactOptionalPropertyTypes=true#code/JYWwDg9gTgLgBDAnmApnA3gVQHbAtgFQgElsYUoBnFAYxj2wF84AzKCEOAciVQFoWKSjC4BuAFDjeaHAzgBeDDAAWKABQBKAFxwAbhGAATZgB8MAcygoAhjDXWo5ncKjBs57XoPG4Z9EJprVB0AIwgIABsbJgkpZDRScipaenwFOFl8IkSKajoGAB5M7AA+CQB6cvkSpVVNHX0jUThLGzsHJzgXNw8G72aAoJRQ8KjrGKA) @category Type */ diff --git a/source/union-to-tuple.d.ts b/source/union-to-tuple.d.ts index d06bf8aab..e3285a391 100644 --- a/source/union-to-tuple.d.ts +++ b/source/union-to-tuple.d.ts @@ -30,6 +30,7 @@ type Numbers = 1 | 2 | 3; type NumbersTuple = UnionToTuple; //=> [1, 2, 3] ``` +[Playground Link](https://www.typescriptlang.org/play/?exactOptionalPropertyTypes=true#code/JYWwDg9gTgLgBDAnmApnA3gVQHbAtgFQgIFcwAbFAXzgDMoIQ4ByJVAWlpQGcZmBuAFCC2aAHIkQAIxRRucALxwAjHAA+cAEzq4AZiGi4E6bO6kKaJTjyFiZSgB5jMuQD4hAeg8LXcANrKADRawboAukA) @example ``` @@ -47,6 +48,7 @@ type Pet = keyof typeof pets; const petList = Object.keys(pets) as UnionToTuple; //=> ['dog', 'cat', 'snake'] ``` +[Playground Link](https://www.typescriptlang.org/play/?exactOptionalPropertyTypes=true#code/JYWwDg9gTgLgBDAnmApnA3gVQHbAtgFQgIFcwAbFAXzgDMoIQ4ByJVAWlpQGcZmBuAFCCAxvl5xUMbnAC8GQXDgATCAHMAXC0C8G4DYd5gBpFcEQEMYW5tsCMO4ePdspgNYpL2wLA7dqkMFs0ABRR4eRdECFoEZBRwySDuIQB6BNkAPhZVNWY4AB8WMz4clgdnFGZhMWwJKQAZYAl5AHkAIwArFBEYADpQ7gAKKW4ASjhTGRw8QmIySgAeQJgUxOS0gG1mDMM8803mYpdmAF0gA) @category Array */ diff --git a/source/unknown-array.d.ts b/source/unknown-array.d.ts index b9351ceea..4911ccca3 100644 --- a/source/unknown-array.d.ts +++ b/source/unknown-array.d.ts @@ -18,6 +18,7 @@ type B = IsArray; type C = IsArray; //=> false ``` +[Playground Link](https://www.typescriptlang.org/play/?exactOptionalPropertyTypes=true#code/JYWwDg9gTgLgBDAnmApnA3gVQHYGtsQDu2AglFAIaIC+cAZlBCHAORKoC0dKAzjCwG4AUEPZoAkjzKVEAHgAqAPjgBeOPLgoAHjBTYAJjzg58RUuSpwA-AigBXNAC56FADY8Uw0cjQlVcSWkqWQBtFjoICBYAXUVhAHp4lWUYexQRMTgAIX9AizkoFAp9CGxXRDhsOxAAIxQoENiEpJS0jJ84AGFcqXzZPihgbABzOKFE5Jd3FCA) @category Type @category Array diff --git a/source/unknown-map.d.ts b/source/unknown-map.d.ts index 122677715..8a30c84d6 100644 --- a/source/unknown-map.d.ts +++ b/source/unknown-map.d.ts @@ -18,6 +18,7 @@ type B = IsMap>; type C = IsMap; //=> false ``` +[Playground Link](https://www.typescriptlang.org/play/?exactOptionalPropertyTypes=true#code/JYWwDg9gTgLgBDAnmApnA3gVQHYGtsQDu2AsgIZgC+cAZlBCHAORKoC0NKAzjEwNwAoAazQBJLuTAAeACoA+OAF44MuCgAeMFNgAmXODnxFSFOAH4EUAK5oAXLTIAbLikHDkaAIJK44yVP8eKGBsAHMAGjhsKxAAIxQoOTlBAHoUxQUYaxQhETgAIR8-CikAJRQyHQhsR0R-aLiEyKCQ0KTU9Mzs3I84AGEiiRKWsOSBNIyHZxQgA) @category Type */ diff --git a/source/unknown-record.d.ts b/source/unknown-record.d.ts index 70fe52f44..9a279f6de 100644 --- a/source/unknown-record.d.ts +++ b/source/unknown-record.d.ts @@ -24,6 +24,7 @@ isObject({hello: 'world'}); isObject('hello'); //=> false ``` +[Playground Link](https://www.typescriptlang.org/play/?exactOptionalPropertyTypes=true#code/JYWwDg9gTgLgBDAnmApnA3gVQHYGtsQDu2ASigMbQAmAvnAGZQQhwDkSqAtPSgM4ysA3AChh9AK7ZyMYBGwIIAKV5yAFBABGAKwowAXHBz4ipCtQCUGYQEgoKGOKjzFAZQDyAOQB0-KMGwA5sD0iOrauuYiNKIwSirYqugAFigANqkQBqyE0KlUrDSRwgD0xQC8AHxs6ABEKekQNXo1OVB5NTSsohJSMnJwwLxu4dKqAG4AhqniKAaSxsTmBpPTaIOGeATEZJRQVFa29o7yHCgQ9HArM3Blt2yaOtKscABkL5dT1wCEd9ji6VFRINho8YIl6hksq08gUiqVKggoDMgUMRmDWBCIKw4eUqvQprwUEA) @category Type @category Object diff --git a/source/unknown-set.d.ts b/source/unknown-set.d.ts index e2d18f6f6..2011e31a4 100644 --- a/source/unknown-set.d.ts +++ b/source/unknown-set.d.ts @@ -18,6 +18,7 @@ type B = IsSet>; type C = IsSet; //=> false ``` +[Playground Link](https://www.typescriptlang.org/play/?exactOptionalPropertyTypes=true#code/JYWwDg9gTgLgBDAnmApnA3gVQHYGtsQDu2AyijAL5wBmUEIcA5EqgLTUoDOMjA3AFD8WaAJKcyMADwAVAHxwAvHGlwUADxgpsAE05wc+IqXJwA-AigBXNAC4aAQwA2nFAKHI0AQUVwxEyf7cUMDYAOaysgIA9FEK8jBWKILCcABCPn7kkgBKKPbaENiOiP7YliAARihQEdGx8YnJHnAAwhniWUEh4XVxDs4oQA) @category Type */ diff --git a/source/value-of.d.ts b/source/value-of.d.ts index c11c8ba93..32afd3d71 100644 --- a/source/value-of.d.ts +++ b/source/value-of.d.ts @@ -16,6 +16,7 @@ type B = ValueOf<{id: number; name: string; active: boolean}, 'name'>; type C = ValueOf<{id: number; name: string; active: boolean}, 'id' | 'name'>; //=> number | string ``` +[Playground Link](https://www.typescriptlang.org/play/?exactOptionalPropertyTypes=true#code/JYWwDg9gTgLgBDAnmApnA3gNQIYBsCuKA8gGYC+cJUEIcA5EqgLQkoDOMdA3AFA+NoAgnAC8cHAWIkAPOmAATAFxwAdvhAAjFFC6rsIFMo5RgKgOa7sAYxjAAbobgaIEXCmwqyAPl4B6XyJequpaUHAAPnDGpmYRTi5uHnwCcABCouJ4hKSyCspqmtq6KvqO0eaWNvaOzq7ungA09CUGdD48-oFRMCbmychoAMIZEtkyckrBhTp6BkY9MZW2Dsq1iY30CnRxdC0obX4BQQWhceVmQA) @category Object */ diff --git a/source/words.d.ts b/source/words.d.ts index 1b791aeee..67e47b165 100644 --- a/source/words.d.ts +++ b/source/words.d.ts @@ -36,6 +36,7 @@ export type WordsOptions = { type Example2 = Words<'p2pNetwork', {splitOnNumbers: false}>; //=> ["p2p", "Network"] ``` + [Playground Link](https://www.typescriptlang.org/play/?exactOptionalPropertyTypes=true#code/JYWwDg9gTgLgBDAnmApnA3gdWgEwM4C+cAZlBCHAORKoC0xKeMlA3AFBs1oCiAHgIbgANigCMcALxxsUfAB5KYAExgAcihgB3aAGtKAGgx4wQ4DADyAO1UBXEACMUUPAC4EUGygIA+dgHo-CW84AG0AIjAwwzClKLgIuLD1LV0wgF0OLjg+QRMUJUlpXDwFZTUNbSg9Q3RjUwtrO0dnN2J+ITwvXzYAoNCIlUTkyp10oA) */ splitOnNumbers?: boolean; }; @@ -73,6 +74,7 @@ type Words4 = Words<'lifeIs42'>; type Words5 = Words<'p2pNetwork', {splitOnNumbers: false}>; //=> ['p2p', 'Network'] ``` +[Playground Link](https://www.typescriptlang.org/play/?exactOptionalPropertyTypes=true#code/JYWwDg9gTgLgBDAnmApnA3gdWgEwM4C+cAZlBCHAORKoC0xKeMlA3AFBs1rZT4AMcALxwe+ADyUAFigA2MiDxk5KAPnYB6dYJVwA2lNnzKAGiqLlAXQ5cRuPAEYht3ngnS5CgPIAlADIARVQ0tHX13I1NKTB8AyitOZG47ACYnUVcDD1oAd2glILZNbT1MiKpcqHz4m3SAZjS7CVpacIgEaQB9Cvy1QpCS1pMqGGkhym7La0TnfAAWBpcJGWAGAEk8WeSCotDKZYYx9bHNuKnUGbwAVgXxSjBksAA5FBgKgGsh9DwwZZhPADtHgBXEAAIxQUDwAC4SABDGR4FAEXo7Er3MBjZ6vaAfCxAA) @category Change case @category Template literal diff --git a/source/writable-deep.d.ts b/source/writable-deep.d.ts index 315c47652..435a13cce 100644 --- a/source/writable-deep.d.ts +++ b/source/writable-deep.d.ts @@ -20,6 +20,7 @@ writableDeepFoo.a = 3; writableDeepFoo.b[0] = 'new value'; writableDeepFoo.b = ['something']; ``` +[Playground Link](https://www.typescriptlang.org/play/?exactOptionalPropertyTypes=true#code/JYWwDg9gTgLgBDAnmApnA3gdSsGBDAIwBsUARFFMAXzgDMoIQ4ByJVAWlpQGcZmBuAFCC2aAGIQIcALwZBASCgo8AEwgA7Iojh4AXHHUBXEARRQhi5Ws3aC+pao1a4vHOoDmAbQC6-OAHp-OAAVKW4ACwgAdwRwvHgQQ3wCYCJcbWBuOBUKMGc8Wi4AYxgUFQA6BQdrZyL9AkkSPHUhKiFBIo1eOCicZJJySgkIfWxcQgHcgB5hgD4ZDD04AEYAGjg7OE9mACZmb3W6hChDFDbBXvHiMlzh8rwFgGYhS-6boclygk8ABm8F5jqFAxABueCIpwEFz6E3eYDuBAW224jBQMHCwA8+34QA) Note that types containing overloaded functions are not made deeply writable due to a [TypeScript limitation](https://github.com/microsoft/TypeScript/issues/29732). diff --git a/source/writable-keys-of.d.ts b/source/writable-keys-of.d.ts index 5a7de488c..894200d33 100644 --- a/source/writable-keys-of.d.ts +++ b/source/writable-keys-of.d.ts @@ -23,6 +23,7 @@ const update1: UpdateRequest = { surname: 'Acme', }; ``` +[Playground Link](https://www.typescriptlang.org/play/?exactOptionalPropertyTypes=true#code/JYWwDg9gTgLgBDAnmApnA3gdSsGBDAIwBsUBpFRAZwHkAzAXzlqghDgHIlUBaWlSmOwDcAKBHAAdjBRRaeAMZoAqpRkYRASAl4QKAFxwBOCQHNRGygFco23QaOSzYjVBR4AJhAlFEcYO4MJSxACGVF6MS5lMHc8aQAlFABHS34YAB4AUSlcXxQAD2kJd0o4CAIAKxR5GAA+OABeOAAFYHkAayycpAAaOGxcQhJyKjoumFza2tEReS8BOEsYuJQARgMlZYTk1IF0lRl6pvRNW30OAEEiNpR2Hs0rGx1z9gv5XTuReiEgA) @category Utilities */ diff --git a/source/writable.d.ts b/source/writable.d.ts index 4afc28e40..ecf391407 100644 --- a/source/writable.d.ts +++ b/source/writable.d.ts @@ -50,6 +50,7 @@ readonlyArray.push(4); // Will fail as the array itself is readonly. const writableArray: Writable = readonlyArray as Writable; writableArray.push(4); // Will work as the array itself is now writable. ``` +[Playground Link](https://www.typescriptlang.org/play/?exactOptionalPropertyTypes=true#code/JYWwDg9gTgLgBDAnmApnA3gdSsGBDAIwBsUBfOAMyghDgHIlUBaClAZxjoG4AoHxtADEIEOAF4MPAJBQUeACYQAdkURw8ALjhKAriAIoovGXMUq1BLbIXLVcDjiUBzANoBdLnAD0XuABVRNgALCAB3BCC8eFs1GCC0EB18AmAiXDUOKJ02OAgKCLQwalRYYHYAGm0IeDiUYCg4ADc8Ih0K9Vl1ClYAYxgUeQA6aWszOx6tAhESPCVeUl4eHuUOOFCcZJJhCC1sXEISAB5tgD5xDE04AEZKyzgXOgAmOjdKiYQoNoWedf3iFG2gzw5wAzLwfHAAAIwNhMFAAD1QfThUGoUB+GwOAJEgwILgADG5znQlChws1WihuN5fJhUkR7DB6ZQ8Kl1Dlak0Wm1cvkihASkg4AAiAjCuDAHIcZnA0YxBDIFDDX6bbEQXHnB5sGgoOLAZwvTwQulEBmhaAAa3ZBRFYrg-MFalwbBQRHykqqcCIyichjgcvMw34irgAGUdXtVedI1jjiJKnQCHQ4AAfeg9OgncG+ARhiOY-7ndA8CEmGzmdRaXT6QzZuBSO4BuwOfWuDw0uAASU4OSUYTWBZIg388QVqF5NodhiFshArKUOR0Sjw3RQfQGw1L7ymEBmcw73bovf7Kqxm98pD4EIAgkRtfYdGBILAcnhUXhEEsVvAm4hr+-ECsUx5WrAwoHcTUbjgR5KhBDwS18aFYQRJEYBRNEeF-f8oA-QYwGyIIAAoABYAEojVpZkKFZBk8A5Uc3xwp0YVdd0cl-YZlgXeBT3+bCP12QcUEOAQ8n9YDzH4xAzgkLCAOtGN-hExUxLkpiswxP4SCkvCCJI8iOxNM1LWtTlGI-CUWLdCVj3CXihyAA) @category Object */ diff --git a/source/xor.d.ts b/source/xor.d.ts index 2329ea627..66d824271 100644 --- a/source/xor.d.ts +++ b/source/xor.d.ts @@ -23,6 +23,7 @@ type FT = Xor; type FF = Xor; //=> false ``` +[Playground Link](https://www.typescriptlang.org/play/?exactOptionalPropertyTypes=true#code/JYWwDg9gTgLgBDAnmApnA3gDWgXzgMyghDgHIlUBafFAZxlIG4AoZitAFQ7gF45soAHhhQArigA0CMSgB8LAPQKesggEMANrRSt2cDgDFe-aMJlT8m7fOZKV08buRoD3PgMGWtkh3MXLVEUc2ZzgDI3dTL20LKz9bAPVvIA) Note: When `boolean` is passed as an argument, it is distributed into separate cases, and the final result is a union of those cases. For example, `Xor` expands to `Xor | Xor`, which simplifies to `true | false` (i.e., `boolean`). @@ -46,6 +47,7 @@ type D = Xor; type E = Xor; //=> boolean ``` +[Playground Link](https://www.typescriptlang.org/play/?exactOptionalPropertyTypes=true#code/JYWwDg9gTgLgBDAnmApnA3gDWgXzgMyghDgHIlUBafFAZxlIG4AoZitAQTgF45soAPPgCGAG1ooANHABGECKJTCAdgD4WAeg3dVs+YpWt2cAEI8+0AXIVLl0keJTrmWnXpuG2yNAGFz-ARgoAFcpdwM1TW1dawijbzgAEX9LWNtpINDnVxj9W3jUOABRFME0lWlyyJdo8NsgA) Note: If `never` is passed as an argument, it is treated as `false` and the result is computed accordingly. @@ -74,6 +76,7 @@ type F = Xor; type G = Xor; //=> false ``` +[Playground Link](https://www.typescriptlang.org/play/?exactOptionalPropertyTypes=true#code/JYWwDg9gTgLgBDAnmApnA3gDWgXzgMyghDgHIlUBafFAZxlIG4AoZitAQTgF45soAPDCgBXFABo4AOxQA3FFAB8LAPQruihKJSt2cAEI8+0ATPlRJwscuZqNWsbuRoAwkf4D8AQwA2tCdJyCjZ2mt5+OmzOcAAi7iZmCpLh-iHqYb7+TqhwAKLxggBGEBA+KF5SkolKqulwxaXlUtloAGIFpkEW9SVlFWn2DX3NUTkA4h3VVV0DGRFAA) @see {@link And} @see {@link Or} diff --git a/test-d/internal/has-multiple-call-signatures.ts b/test-d/internal/has-multiple-call-signatures.ts index ccebc2a5c..2fc848515 100644 --- a/test-d/internal/has-multiple-call-signatures.ts +++ b/test-d/internal/has-multiple-call-signatures.ts @@ -8,7 +8,7 @@ type Overloaded = { type Overloaded2 = { (foo: number | undefined): string; - // eslint-disable-next-line @typescript-eslint/unified-signatures + (foo: number): string; }; diff --git a/xo.config.js b/xo.config.js index 1244d695e..058dba80c 100644 --- a/xo.config.js +++ b/xo.config.js @@ -4,6 +4,7 @@ import {sourceFilesExtensionRule} from './lint-rules/source-files-extension.js'; import {requireExportedTypesRule} from './lint-rules/require-exported-types.js'; import {requireExportRule} from './lint-rules/require-export.js'; import {validateJSDocCodeblocksRule} from './lint-rules/validate-jsdoc-codeblocks.js'; +import {requirePlaygroundLinkRule} from './lint-rules/require-playground-link.js'; /** @type {import('xo').FlatXoConfig} */ const xoConfig = [ @@ -38,6 +39,12 @@ const xoConfig = [ 'error', 'prefer-top-level', ], + 'unicorn/template-indent': [ + 'error', + { + indent: '\t', + }, + ], }, }, { @@ -60,6 +67,7 @@ const xoConfig = [ 'require-exported-types': requireExportedTypesRule, 'require-export': requireExportRule, 'validate-jsdoc-codeblocks': validateJSDocCodeblocksRule, + 'require-playground-link': requirePlaygroundLinkRule, }, }, }, @@ -83,6 +91,7 @@ const xoConfig = [ 'type-fest/require-exported-types': 'error', 'type-fest/require-export': 'error', 'type-fest/validate-jsdoc-codeblocks': 'error', + 'type-fest/require-playground-link': 'error', }, }, { @@ -94,6 +103,7 @@ const xoConfig = [ 'skipComments': true, }, ], + 'type-fest/require-playground-link': 'error', }, }, ];