强制执行可选类型typescript
有没有办法强制函数只能使用可选类型调用 其中可选的定义为强制执行可选类型typescript,typescript,Typescript,有没有办法强制函数只能使用可选类型调用 其中可选的定义为 type Optional<T> = T | undefined 类型可选=T |未定义 我想定义一个函数f,这样 declare type Foo = { foo: string } declare var x: Optional<Foo> declare var y: Foo f(x) // ts typecheck ok f(y) // ts typecheck ko 声明类型Foo={Foo:st
type Optional<T> = T | undefined
类型可选=T |未定义
我想定义一个函数f,这样
declare type Foo = { foo: string }
declare var x: Optional<Foo>
declare var y: Foo
f(x) // ts typecheck ok
f(y) // ts typecheck ko
声明类型Foo={Foo:string}
声明变量x:可选
声明变量y:Foo
f(x)//ts类型检查正常
f(y)//ts类型检查
据我所知,这是可行的:
declare function f<T>(v:Optional<T> extends T ? T : never) : any;
声明函数f(v:可选扩展T?T:从不):any;
操场但为什么?通常,如果一个函数可以处理
T | undefined
,那么T
应该可以。我想键入检查,以确保泛型函数只能在可选值上调用。这是不可能的。因为union总是由一个值表示,该值在您的示例中为T或未定义。这两个值都是此类型的有效值确实不可能阻止Foo
分配给Optional
,但问题要求f
签名,就我所知,只要Optional
不分配给Foo
,就可以编写这样的函数。请看下面我的答案。