简体   繁体   English

Typescript 返回类型问题

[英]Typescript ReturnType issue

Im trying to get the correct return type based on the method key of an interface.我试图根据接口的方法键获取正确的返回类型。 Typescript is showing an issue here but i cant work out why. Typescript 在这里显示了一个问题,但我不知道为什么。

interface Provider {
  reboot?(a: string): (string | null)[]
  cc?(): Promise<string>
}
type ProviderReturn<K extends keyof Provider> = ReturnType<Provider[K]>

Playground 操场

Your interface defines an object with 2 potentially undefined methods.您的接口定义了一个 object 和 2 个可能未定义的方法。 ReturnType does not work on undefined ReturnType不适用于undefined

You can do follwing with Nonnullable您可以使用Nonnullable进行后续操作

interface Provider {
  reboot?(a: string): (string | null)[]
  cc?(): Promise<string>
}
type ProviderReturn<K extends keyof Provider> = ReturnType<NonNullable<Provider[K]>>

If the optional part matters, you can use a conditional type:如果可选部分很重要,您可以使用条件类型:

interface Provider {
  reboot?(a: string): (string | null)[]
  cc?(): Promise<string>
  foo(): string
}

type ProviderReturn<K extends keyof Provider> = undefined extends Provider[K] ? ReturnType<NonNullable<Provider[K]>> | undefined : ReturnType<NonNullable<Provider[K]>>

type a = ProviderReturn<'reboot'> // (string | null)[] | null; 
type b = ProviderReturn<'foo'> // string

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM