typescript 是否可以将类型参数约束为不具有属性?

s4n0splo  于 2023-10-22  发布在  TypeScript
关注(0)|答案(1)|浏览(116)

我可以写一个函数吗

const f = <T extends ???>(x: T) => ...

这样当且仅当T没有特定的属性时,对它的调用才能编译?我的具体用例是这个函数:

export declare function withApollo<TProps, TResult = any>(WrappedComponent: React.ComponentType<WithApolloClient<Omit<TProps, "client">>>, operationOptions?: OperationOption<TProps, TResult>): React.ComponentClass<Omit<TProps, "client">>;

我发现类型推断在使用它时效果很差,并且总是需要在我们的代码库中提供显式的类型参数。如果我可以指定T没有"client",我可以提供一个更好的 Package 器。

inb24sb2

inb24sb21#

是的,你可以在TypeScript中使用条件类型。您可以创建一个类型来检查给定类型中是否存在特定属性,然后使用它有条件地启用或禁用某些行为。在本例中,您希望确保T没有名为“client”的属性:

type WithoutClient<T> = "client" extends keyof T ? never : any;

const f = <T extends WithoutClient<T>>(x: T) => {
  // Your implementation here
};

相关问题