mirror of https://github.com/vuejs/core.git
fix: use answer from stackoverflow
This commit is contained in:
parent
c2f762249c
commit
425ece0d5d
|
@ -1,5 +1,6 @@
|
||||||
import {
|
import {
|
||||||
type IfAny,
|
type IfAny,
|
||||||
|
type IfEquals,
|
||||||
hasChanged,
|
hasChanged,
|
||||||
isArray,
|
isArray,
|
||||||
isFunction,
|
isFunction,
|
||||||
|
@ -486,14 +487,19 @@ function propertyToRef(
|
||||||
export interface RefUnwrapBailTypes {}
|
export interface RefUnwrapBailTypes {}
|
||||||
|
|
||||||
export type ShallowUnwrapRef<T> = {
|
export type ShallowUnwrapRef<T> = {
|
||||||
readonly [K in keyof Pick<T, ReadonlyKeys<T>>]: DistributeRef<T[K]>
|
[K in keyof Pick<T, MutableKeys<T>>]: DistributeRef<T[K]>
|
||||||
} & {
|
} & {
|
||||||
[K in keyof Omit<T, ReadonlyKeys<T>>]: DistributeRef<T[K]>
|
readonly [K in keyof Omit<T, MutableKeys<T>>]: DistributeRef<T[K]>
|
||||||
}
|
}
|
||||||
|
|
||||||
type ReadonlyKeys<O> = {
|
type MutableKeys<T> = {
|
||||||
[K in keyof O]: O[K] extends Readonly<any> ? K : never
|
[P in keyof T]-?: IfEquals<
|
||||||
}[keyof O]
|
{ [Q in P]: T[P] },
|
||||||
|
{ -readonly [Q in P]: T[P] },
|
||||||
|
P,
|
||||||
|
never
|
||||||
|
>
|
||||||
|
}[keyof T]
|
||||||
|
|
||||||
type DistributeRef<T> = T extends Ref<infer V, unknown> ? V : T
|
type DistributeRef<T> = T extends Ref<infer V, unknown> ? V : T
|
||||||
|
|
||||||
|
|
|
@ -13,6 +13,10 @@ export type LooseRequired<T> = { [P in keyof (T & Required<T>)]: T[P] }
|
||||||
// https://stackoverflow.com/questions/49927523/disallow-call-with-any/49928360#49928360
|
// https://stackoverflow.com/questions/49927523/disallow-call-with-any/49928360#49928360
|
||||||
export type IfAny<T, Y, N> = 0 extends 1 & T ? Y : N
|
export type IfAny<T, Y, N> = 0 extends 1 & T ? Y : N
|
||||||
|
|
||||||
|
// https://stackoverflow.com/questions/52443276/how-to-exclude-getter-only-properties-from-type-in-typescript/52473108#52473108
|
||||||
|
export type IfEquals<A, B, Y, N> =
|
||||||
|
(<T>() => T extends A ? 1 : 2) extends <T>() => T extends B ? 1 : 2 ? Y : N
|
||||||
|
|
||||||
export type IsKeyValues<T, K = string> = IfAny<
|
export type IsKeyValues<T, K = string> = IfAny<
|
||||||
T,
|
T,
|
||||||
false,
|
false,
|
||||||
|
|
Loading…
Reference in New Issue