fix(types): should unwrap array -> object -> ref

This commit is contained in:
Evan You 2020-06-29 12:26:28 -04:00
parent 028a8c20df
commit 82b28a5ecb
3 changed files with 21 additions and 3 deletions

View File

@ -26,7 +26,7 @@ module.exports = {
overrides: [
// tests, no restrictions (runs in Node / jest with jsdom)
{
files: ['**/__tests__/**'],
files: ['**/__tests__/**', 'test-dts/**'],
rules: {
'no-restricted-globals': 'off',
'no-restricted-syntax': 'off'

View File

@ -165,9 +165,10 @@ type UnwrapRefSimple<T> = T extends
| CollectionTypes
| BaseTypes
| Ref
| Array<any>
| RefUnwrapBailTypes[keyof RefUnwrapBailTypes]
? T
: T extends Array<any>
? { [K in keyof T]: T[K] extends Ref ? T[K] : UnwrapRefSimple<T[K]> }
: T extends object ? UnwrappedObject<T> : T
// Extract all known symbols from an object

View File

@ -41,6 +41,23 @@ function plainType(arg: number | Ref<number>) {
expectType<Ref<IteratorFoo | null | undefined>>(
ref<IteratorFoo | null | undefined>()
)
// should not unwrap ref inside arrays
const arr = ref([1, new Map<string, any>(), ref('1')]).value
const value = arr[0]
if (isRef(value)) {
expectType<Ref>(value)
} else if (typeof value === 'number') {
expectType<number>(value)
} else {
// should narrow down to Map type
// and not contain any Ref type
expectType<Map<string, any>>(value)
}
// should still unwrap in objects nested in arrays
const arr2 = ref([{ a: ref(1) }]).value
expectType<number>(arr2[0].a)
}
plainType(1)