Typescript 泛型类型作为接收参数的属性
如何将参数属性指定给泛型?代码如下:Typescript 泛型类型作为接收参数的属性,typescript,Typescript,如何将参数属性指定给泛型?代码如下: const foo = <T = ???someObject.bar???>(someObject: {[string]: any}): T => { return someObject.bar } constfoo=(someObject:{[string]:any}):T=>{ 返回someObject.bar } 如何将T分配给someObject的bar属性?因此您希望参数至少具有属性bar,对吗? 这意味着它是 int
const foo = <T = ???someObject.bar???>(someObject: {[string]: any}): T => {
return someObject.bar
}
constfoo=(someObject:{[string]:any}):T=>{
返回someObject.bar
}
如何将
T
分配给someObject
的bar
属性?因此您希望参数至少具有属性bar
,对吗?
这意味着它是
interface WithBar<T> {
bar: T
}
您现在可以一般使用它:
const barFoo1 = { bar: "asdf", foo: "fdsa"};
const myBar1: string = foo(barFoo1);
const barFoo2 = { bar: 123, foo: 321};
const myBar2: number = foo(barFoo2);
顺便说一下,如果您想直接传递以对象表示法(对象文字)编写的对象,您可能会遇到一个错误:调用
foo({bar:123,foo:321})
yieldsobject-literal可能只指定已知的属性,而类型{bar:string}
中不存在“bar”。这源于TypeScript对新类型的严格检查,请参阅。您可以通过要求参数具有子类型来规避此问题:constfoo=(someObject:X):T=>…
const foo = <T>(someObject: { bar: T }): T => {
return someObject.bar
}
const barFoo1 = { bar: "asdf", foo: "fdsa"};
const myBar1: string = foo(barFoo1);
const barFoo2 = { bar: 123, foo: 321};
const myBar2: number = foo(barFoo2);