|
1 | 1 | import test from 'ava';
|
2 | 2 | import {ExpectTypeOf, expectTypeOf} from 'expect-type';
|
3 | 3 | import {TypedArray} from 'type-fest';
|
4 |
| -import ow, {BasePredicate} from '../source'; |
| 4 | +import ow, {BasePredicate, Infer} from '../source'; |
5 | 5 |
|
6 | 6 | test('type-level tests', t => {
|
7 | 7 | t.is(typeof typeTests, 'function');
|
@@ -143,6 +143,92 @@ function typeTests(value: unknown): Array<(() => void)> {
|
143 | 143 | };
|
144 | 144 |
|
145 | 145 | return tests;
|
| 146 | + }, |
| 147 | + |
| 148 | + (): void => { |
| 149 | + const schema = ow.object.exactShape({ |
| 150 | + undefined: ow.undefined, |
| 151 | + null: ow.null, |
| 152 | + nullOrUndefined: ow.nullOrUndefined, |
| 153 | + optionalString: ow.optional.string, |
| 154 | + number: ow.number, |
| 155 | + boolean: ow.boolean, |
| 156 | + symbol: ow.symbol, |
| 157 | + array: ow.array, |
| 158 | + function: ow.function, |
| 159 | + buffer: ow.buffer, |
| 160 | + object: ow.object, |
| 161 | + regExp: ow.regExp, |
| 162 | + date: ow.date, |
| 163 | + error: ow.error, |
| 164 | + promise: ow.promise, |
| 165 | + map: ow.map, |
| 166 | + set: ow.set, |
| 167 | + weakMap: ow.weakMap, |
| 168 | + weakSet: ow.weakSet, |
| 169 | + int8Array: ow.int8Array, |
| 170 | + uint8Array: ow.uint8Array, |
| 171 | + uint8ClampedArray: ow.uint8ClampedArray, |
| 172 | + int16Array: ow.int16Array, |
| 173 | + uint16Array: ow.uint16Array, |
| 174 | + int32Array: ow.int32Array, |
| 175 | + uint32Array: ow.uint32Array, |
| 176 | + float32Array: ow.float32Array, |
| 177 | + float64Array: ow.float64Array, |
| 178 | + arrayBuffer: ow.arrayBuffer, |
| 179 | + dataView: ow.dataView, |
| 180 | + sharedArrayBuffer: ow.sharedArrayBuffer, |
| 181 | + nan: ow.nan, |
| 182 | + iterable: ow.iterable, |
| 183 | + typedArray: ow.typedArray, |
| 184 | + nested: ow.object.exactShape({ |
| 185 | + nested: ow.array.ofType( |
| 186 | + ow.object.exactShape({ |
| 187 | + nested: ow.number |
| 188 | + }) |
| 189 | + ) |
| 190 | + }) |
| 191 | + }); |
| 192 | + |
| 193 | + expectTypeOf<Infer<typeof schema>>().toEqualTypeOf<{ |
| 194 | + undefined: undefined; |
| 195 | + null: null; |
| 196 | + nullOrUndefined: null | undefined; |
| 197 | + optionalString: string | undefined; |
| 198 | + number: number; |
| 199 | + boolean: boolean; |
| 200 | + symbol: symbol; |
| 201 | + array: unknown[]; |
| 202 | + function: Function; |
| 203 | + buffer: Buffer; |
| 204 | + object: object; |
| 205 | + regExp: RegExp; |
| 206 | + date: Date; |
| 207 | + error: Error; |
| 208 | + promise: Promise<unknown>; |
| 209 | + map: Map<unknown, unknown>; |
| 210 | + set: Set<any>; |
| 211 | + weakMap: WeakMap<object, unknown>; |
| 212 | + weakSet: WeakSet<object>; |
| 213 | + int8Array: Int8Array; |
| 214 | + uint8Array: Uint8Array; |
| 215 | + uint8ClampedArray: Uint8ClampedArray; |
| 216 | + int16Array: Int16Array; |
| 217 | + uint16Array: Uint16Array; |
| 218 | + int32Array: Int32Array; |
| 219 | + uint32Array: Uint32Array; |
| 220 | + float32Array: Float32Array; |
| 221 | + float64Array: Float64Array; |
| 222 | + arrayBuffer: ArrayBuffer; |
| 223 | + dataView: DataView; |
| 224 | + sharedArrayBuffer: SharedArrayBuffer; |
| 225 | + nan: number; |
| 226 | + iterable: Iterable<unknown>; |
| 227 | + typedArray: TypedArray; |
| 228 | + nested: { |
| 229 | + nested: Array<{nested: number}>; |
| 230 | + }; |
| 231 | + }>(); |
146 | 232 | }
|
147 | 233 | ];
|
148 | 234 | }
|
0 commit comments