fix(types): should unwrap array -> object -> ref
This commit is contained in:
parent
028a8c20df
commit
82b28a5ecb
@ -26,7 +26,7 @@ module.exports = {
|
|||||||
overrides: [
|
overrides: [
|
||||||
// tests, no restrictions (runs in Node / jest with jsdom)
|
// tests, no restrictions (runs in Node / jest with jsdom)
|
||||||
{
|
{
|
||||||
files: ['**/__tests__/**'],
|
files: ['**/__tests__/**', 'test-dts/**'],
|
||||||
rules: {
|
rules: {
|
||||||
'no-restricted-globals': 'off',
|
'no-restricted-globals': 'off',
|
||||||
'no-restricted-syntax': 'off'
|
'no-restricted-syntax': 'off'
|
||||||
|
@ -165,10 +165,11 @@ type UnwrapRefSimple<T> = T extends
|
|||||||
| CollectionTypes
|
| CollectionTypes
|
||||||
| BaseTypes
|
| BaseTypes
|
||||||
| Ref
|
| Ref
|
||||||
| Array<any>
|
|
||||||
| RefUnwrapBailTypes[keyof RefUnwrapBailTypes]
|
| RefUnwrapBailTypes[keyof RefUnwrapBailTypes]
|
||||||
? T
|
? T
|
||||||
: T extends object ? UnwrappedObject<T> : 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
|
// Extract all known symbols from an object
|
||||||
// when unwrapping Object the symbols are not `in keyof`, this should cover all the
|
// when unwrapping Object the symbols are not `in keyof`, this should cover all the
|
||||||
|
@ -41,6 +41,23 @@ function plainType(arg: number | Ref<number>) {
|
|||||||
expectType<Ref<IteratorFoo | null | undefined>>(
|
expectType<Ref<IteratorFoo | null | undefined>>(
|
||||||
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)
|
plainType(1)
|
||||||
|
Loading…
Reference in New Issue
Block a user