Skip to content
This repository was archived by the owner on Jun 10, 2025. It is now read-only.

Commit d20e01c

Browse files
committed
Fixing types.
1 parent 9ea2cae commit d20e01c

File tree

6 files changed

+27
-14
lines changed

6 files changed

+27
-14
lines changed

package.json

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -31,13 +31,13 @@
3131
"@appliedblockchain/eslint-config": "3.0.0",
3232
"@tsconfig/node16": "1.0.2",
3333
"@types/jest": "27.4.1",
34-
"@typescript-eslint/eslint-plugin": "5.12.1",
35-
"@typescript-eslint/parser": "5.12.1",
36-
"eslint": "8.9.0",
37-
"eslint-plugin-jest": "26.1.1",
34+
"@typescript-eslint/eslint-plugin": "5.17.0",
35+
"@typescript-eslint/parser": "5.17.0",
36+
"eslint": "8.12.0",
37+
"eslint-plugin-jest": "26.1.3",
3838
"jest": "27.5.1",
3939
"npm-check": "5.9.2",
40-
"ts-jest": "27.1.3",
41-
"typescript": "4.5.5"
40+
"ts-jest": "27.1.4",
41+
"typescript": "4.6.3"
4242
}
4343
}

src/exact.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import { inspect } from 'util'
33
import object from './object.js'
44

55
const exact =
6-
<T extends Record<string, Primitive | Assert<unknown>>>(kvs: T): Assert<{ [k in keyof T]: Asserted<T[k]> }> =>
6+
<T extends Record<string, Primitive | Assert<unknown>>>(kvs: T): Assert<{ [k in keyof T]: T[k] extends Primitive ? T[k] : Asserted<T[k]> }> =>
77
value => {
88
if (typeof value !== 'object' || value === null) {
99
throw new TypeError(`Expected object, got ${inspect(value)}.`)
@@ -15,7 +15,7 @@ const exact =
1515
if (keys.length) {
1616
throw new TypeError(`Unexpected extra keys ${keys.map(String).join(', ')} in ${inspect(value)}.`)
1717
}
18-
return result as { [k in keyof T]: Asserted<T[k]> }
18+
return result as { [k in keyof T]: T[k] extends Primitive ? T[k] : Asserted<T[k]> }
1919
}
2020

2121
export default exact

src/object.test.ts

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,20 @@
11
import * as $ from './index.js'
22

3+
export type My = {
4+
id: number,
5+
uuid: string,
6+
reason: null | string
7+
}
8+
9+
export const assert: $.Assert<My> =
10+
$.object({
11+
id: $.number,
12+
uuid: $.string,
13+
reason: $.nullOr($.string)
14+
})
15+
16+
export type My2 = $.Asserted<typeof assert>
17+
318
test('object', () => {
419
const r = $.object({ foo: $.string, bar: $.number })(JSON.parse('{"foo":"a","bar":1}'))
520
expect(r).toEqual({ foo: 'a', bar: 1 })

src/object.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import { inspect } from 'util'
22
import type { Assert, Asserted, Primitive } from './prelude.js'
33

44
const object =
5-
<T extends Record<string, Primitive | Assert<unknown>>>(kvs: T): Assert<{ [k in keyof T]: Asserted<T[k]> }> =>
5+
<T extends Record<string, Assert<unknown> | Primitive>>(kvs: T): Assert<{ [k in keyof T]: T[k] extends Primitive ? T[k] : Asserted<T[k]> }> =>
66
value => {
77
if (typeof value !== 'object' || value === null) {
88
throw new TypeError(`Expected object, got ${inspect(value)}.`)
@@ -19,7 +19,7 @@ const object =
1919
throw new TypeError(`Expected ${inspect(k)} to be ${inspect(v)}, got ${inspect((value as Record<string, unknown>)[k])} in ${inspect(value)} object.`)
2020
}
2121
}
22-
return value as { [k in keyof T]: Asserted<T[k]> }
22+
return value as { [k in keyof T]: T[k] extends Primitive ? T[k] : Asserted<T[k]> }
2323
}
2424

2525
export default object

src/partial.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import { inspect } from 'util'
22
import type { Assert, Asserted, Primitive } from './prelude.js'
33

44
const partial =
5-
<T extends Record<string, Primitive | Assert<unknown>>>(kvs: T): Assert<{ [k in keyof T]?: Asserted<T[k]> }> =>
5+
<T extends Record<string, Primitive | Assert<unknown>>>(kvs: T): Assert<{ [k in keyof T]?: T[k] extends Primitive ? T[k] : Asserted<T[k]> }> =>
66
value => {
77
if (typeof value !== 'object' || value == null) {
88
throw new TypeError('Expected object.')

src/prelude.ts

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,9 +10,7 @@ export type Assert<R> =
1010
export type Asserted<A> =
1111
A extends (value: unknown) => infer U ?
1212
U :
13-
A extends Primitive ?
14-
A :
15-
never
13+
never
1614

1715
export type Awaited<T> =
1816
T extends PromiseLike<infer U> ?

0 commit comments

Comments
 (0)