我可以编写一个函数吗

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

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

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",我可以提供更好的包装器.

推荐答案

可以,您可以在TypeScrip中使用条件类型.您可以创建一个类型来判断给定类型中是否存在特定属性,然后使用它有条件地启用或禁用某些行为.在您的例子中,您希望确保T没有名为"Client"的属性:

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

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

Typescript相关问答推荐

具有泛型类方法的类方法修饰符

更新为Angular 17后的可选链运算符&?&问题

如何解决类型T不能用于索引类型{ A:typeof A; B:typeof B;. }'

<;T扩展布尔值>;

在排版修饰器中推断方法响应类型

打字错误推断

创建依赖函数参数的类型

打印脚本中正则函数和函数表达式的不同类型缩小行为

编剧- Select 动态下拉选项

两个名称不同的相同打字界面-如何使其干燥/避免重复?

获取类属性的类型';TypeScript中的getter/setter

typescript如何从映射类型推断

在Vite中将SVG导入为ReactComponent-不明确的间接导出:ReactComponent

如何正确键入泛型相对记录值类型?

如何知道使用TypeScript时是否在临时工作流内运行

Karma Angular Unit测试如何创建未解析的promise并在单个测试中解决它,以判断当时的代码是否只在解决后运行

Angular 16:无法覆盖;baseUrl;在tsconfig.app.json中

如何让Record中的每个值都有独立的类型?

对象只能使用 Typescript 中另一个对象的键

有没有办法将类型与关键更改相匹配?