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})
yields
object-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);