定义一个对象的类型,其中包含不同类型的getter和setter。如何获取setter的类型?
定义包含不同类型的getter和setter的对象的类型。
type Foo = {
get bar(): number;
set bar(value: number | string);
}
当试图获取属性的类型时,只能获取getter的类型。
type Bar = Foo["bar"]; // number
那么我如何才能得到setter的类型呢?比如上面例子中的number | string
。
我试过了,但是不管用。
type SetterType<T, U extends string> = T extends { set [key in U]: infer P } ? P : never;
type Bar = SetterType<Foo, "bar">;
添加使用:
假设一个API如下所示。
const foo = addFoo(); // function addFoo returns type Foo.
foo.bar = 123;
foo.bar = "123"; // setter type works fine.
foo.baz = true;
// other properties...
我想 Package 这个函数,通过一个文本对象来表示这些属性。
通过Object.assign
在内部实现。
function myAddFoo(properties: Partial<Foo>): Foo {
const foo = addFoo();
Object.assign(foo, properties);
return foo;
}
const foo = myAddFoo({
bar: "123", // Error, `bar` must be number | undefined.
baz: true,
// other properties...
});
文字对象中的bar
属性不能接受setter类型number | string
。
所以这个函数的参数必须接受setter的类型。
type FooSetters = /* infer all setters type, like `{ bar: number | string }` */;
function myAddFoo(properties: Partial<Omit<Foo, keyof FooSetters> & FooSetters>): Foo
1条答案
按热度按时间hmmo2u0o1#
基本的
Equal
不能比较类型,所以你要么不能这样做,要么需要一个更好的等价类