refactor(types): simplify UnwrapRef + specify iterable method return type (#1444)

This commit is contained in:
Pick 2020-06-26 00:04:14 +08:00 committed by GitHub
parent c43a6e61a0
commit f54be6a462
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 19 additions and 2 deletions

View File

@ -154,12 +154,28 @@ function createForEach(isReadonly: boolean, shallow: boolean) {
}
}
interface Iterable {
[Symbol.iterator](): Iterator
}
interface Iterator {
next(value?: any): IterationResult
}
interface IterationResult {
value: any
done: boolean
}
function createIterableMethod(
method: string | symbol,
isReadonly: boolean,
shallow: boolean
) {
return function(this: IterableCollections, ...args: unknown[]) {
return function(
this: IterableCollections,
...args: unknown[]
): Iterable & Iterator {
const target = toRaw(this)
const isMap = target instanceof Map
const isPair = method === 'entries' || (method === Symbol.iterator && isMap)

View File

@ -165,9 +165,10 @@ type UnwrapRefSimple<T> = T extends
| CollectionTypes
| BaseTypes
| Ref
| Array<any>
| RefUnwrapBailTypes[keyof RefUnwrapBailTypes]
? T
: T extends Array<any> ? T : T extends object ? UnwrappedObject<T> : T
: T extends object ? UnwrappedObject<T> : T
// Extract all known symbols from an object
// when unwrapping Object the symbols are not `in keyof`, this should cover all the