diff --git a/README.md b/README.md index bdc861b..5005413 100644 --- a/README.md +++ b/README.md @@ -949,7 +949,23 @@ test('Conditions can be based on XOR', t => { ### IsNever - +```ts +test('Can ask if T is of type "never"', t => { + assert, False>(t); + assert, False>(t); + assert, False>(t); + assert, False>(t); + assert string>, False>(t); + assert, False>(t); + assert, False>(t); + assert, False>(t); + assert, False>(t); + assert, False>(t); + assert, False>(t); + + assert, True>(t); +}); +``` ### IsNil diff --git a/scripts/testTsVersions.sh b/scripts/testTsVersions.sh index d6c1bac..ab538d1 100644 --- a/scripts/testTsVersions.sh +++ b/scripts/testTsVersions.sh @@ -1,6 +1,6 @@ set -e -for v in 3.0.3 3.1.6 3.2.2 next; do +for v in 3.5.3 next; do npm install --no-save typescript@$v npm test done diff --git a/src/types/predicates.ts b/src/types/predicates.ts index b2731b6..2ecb62b 100644 --- a/src/types/predicates.ts +++ b/src/types/predicates.ts @@ -15,7 +15,7 @@ export type ObjectPrototypeKeys = keyof Object; /** no-doc */ export type FunctionPrototypeKeys = keyof Function; -export type IsNever = Not<(Record & Record)[S]>; +export type IsNever = keyof any extends keyof T ? Not> : False; export type IsType = X extends T ? True : False; export type IsArray = T extends unknown[] ? True : False; export type IsNumber = T extends number ? True : False; diff --git a/test/predicates/IsNever.test.ts b/test/predicates/IsNever.test.ts new file mode 100644 index 0000000..8e05445 --- /dev/null +++ b/test/predicates/IsNever.test.ts @@ -0,0 +1,20 @@ +import test from 'ava'; +import { assert } from '../helpers/assert'; + +import { False, True, IsNever } from '../../src'; + +test('Can ask if T is of type "never"', t => { + assert, False>(t); + assert, False>(t); + assert, False>(t); + assert, False>(t); + assert string>, False>(t); + assert, False>(t); + assert, False>(t); + assert, False>(t); + assert, False>(t); + assert, False>(t); + assert, False>(t); + + assert, True>(t); +}); diff --git a/test/strings/IsNever.test.ts b/test/strings/IsNever.test.ts deleted file mode 100644 index ce6adb7..0000000 --- a/test/strings/IsNever.test.ts +++ /dev/null @@ -1,11 +0,0 @@ -import test from 'ava'; -import { assert } from '../helpers/assert'; - -import { False, True, IsNever } from '../../src'; - -test('Can ask if a string is of type "never"', t => { - type str = 'hi'; - assert, False>(t); - assert, True>(t); - assert, True>(t); -});