fix(types): improve ref typing, close #759
This commit is contained in:
parent
33622d6360
commit
627b9df4a2
@ -23,12 +23,12 @@ export interface Ref<T = any> {
|
||||
const convert = <T extends unknown>(val: T): T =>
|
||||
isObject(val) ? reactive(val) : val
|
||||
|
||||
export function isRef<T>(r: Ref<T> | T): r is Ref<T>
|
||||
export function isRef<T>(r: Ref<T> | unknown): r is Ref<T>
|
||||
export function isRef(r: any): r is Ref {
|
||||
return r ? r._isRef === true : false
|
||||
}
|
||||
|
||||
export function ref<T extends Ref>(value: T): T
|
||||
export function ref<T>(value: T): T extends Ref ? T : Ref<T>
|
||||
export function ref<T>(value: T): Ref<T>
|
||||
export function ref<T = any>(): Ref<T>
|
||||
export function ref(value?: unknown) {
|
||||
|
16
test-dts/ref.test-d.ts
Normal file
16
test-dts/ref.test-d.ts
Normal file
@ -0,0 +1,16 @@
|
||||
import { expectType } from 'tsd'
|
||||
import { Ref, ref } from './index'
|
||||
import { isRef } from '@vue/reactivity'
|
||||
|
||||
function foo(arg: number | Ref<number>) {
|
||||
// ref coercing
|
||||
const coerced = ref(arg)
|
||||
expectType<Ref<number>>(coerced)
|
||||
|
||||
// isRef as type guard
|
||||
if (isRef(arg)) {
|
||||
expectType<Ref<number>>(arg)
|
||||
}
|
||||
}
|
||||
|
||||
foo(1)
|
Loading…
Reference in New Issue
Block a user