【发布时间】:2021-12-13 21:18:40
【问题描述】:
这个例子是通用的和简单的,基本目标更复杂,但理解如何做到这一点很重要。
假设我有一堂课
class Foo {
bar: string;
baz: number;
bob: any; // could be a function
bad() {
return true;
};
}
我有一个函数
const init = (options: InitOptions, bar?: string, baz?: number, bob?: any) => {
const foo = new Foo();
foo.bar = bar ?? options.fallbacks.bar;
foo.baz = baz ?? options.fallbacks.baz;
foo.bob = bob ?? options.fallbacks.bob;
}
我如何创建类型 InitOptions 使其像这样运行
type InitOptions = {
fallbacks = {
bar: string;
baz: number;
}
}
但不必重复自己。前任。 fallbacks 应该是一个对象,其中每个键都是来自 Foo 的属性。
【问题讨论】:
-
请注意:我不确定这是错字还是您的代码的一部分,但我相信您在最后一个代码示例中遗漏了一个 }。
-
这看起来像是一个错字:
const init(options: InitOptions, bar?: string, baz?: number) { -
您可以使用this,但它不会以编程方式将方法与函数值属性区分开来。例如,如果您有
class Foo { a = () => 123; b() { return 123 }; },那么OmitKeysMatching<Foo, Function>将省略a和b。如果你对这种方法没意见,那么我可以写一个答案。如果没有,请edit 显示失败用例的问题。哦,您可能应该将代码编辑为没有拼写错误的minimal reproducible example(例如,const init(...)是无效语法,fallbacks =是无效语法);您应该在 IDE 中进行测试。
标签: typescript typescript-typings