基于函数参数值的窄对象键
Narrow object keys based on function parameter value
最新版本的打字稿是否可以根据通过参数提供的值缩小对象的属性,而不将它们指定为函数的单独通用类型?
我想要下面的工作,其中 bar
returns 的函数签名是一个对象,其键作为参数提供。
理论上,如果参数是常数,应该可以推断出签名。
interface ModelType {
id: string;
name: string;
timestamp: Date;
}
class Foo<T, K extends keyof T = keyof T>{
public bar(selectedField : K[]) : Pick<T,K>{
return {} as any;
}
}
const foobar = new Foo<ModelType>().bar(['id','name']);
console.log(foobar.id) //Success
console.log(foobar.name) //Success
console.log(foobar.timestamp) //Should be an error
我尝试了与 typeof selectedValues
unarray 的任何组合,但最终得到了完整的 K 集。
Class方法generic types
您可以将泛型类型添加到 class 方法到 extends
class 的 generic type
,如下所示:
class Foo<T, K extends keyof T = keyof T>{
// using generic types in your class method
public bar<L extends K>(selectedField : L[]) : Pick<T,L>{
return {} as any;
}
}
最新版本的打字稿是否可以根据通过参数提供的值缩小对象的属性,而不将它们指定为函数的单独通用类型?
我想要下面的工作,其中 bar
returns 的函数签名是一个对象,其键作为参数提供。
理论上,如果参数是常数,应该可以推断出签名。
interface ModelType {
id: string;
name: string;
timestamp: Date;
}
class Foo<T, K extends keyof T = keyof T>{
public bar(selectedField : K[]) : Pick<T,K>{
return {} as any;
}
}
const foobar = new Foo<ModelType>().bar(['id','name']);
console.log(foobar.id) //Success
console.log(foobar.name) //Success
console.log(foobar.timestamp) //Should be an error
我尝试了与 typeof selectedValues
unarray 的任何组合,但最终得到了完整的 K 集。
Class方法generic types
您可以将泛型类型添加到 class 方法到 extends
class 的 generic type
,如下所示:
class Foo<T, K extends keyof T = keyof T>{
// using generic types in your class method
public bar<L extends K>(selectedField : L[]) : Pick<T,L>{
return {} as any;
}
}