Typescript 是否可以添加包装值的泛型类型?

Typescript 是否可以添加包装值的泛型类型?,typescript,Typescript,让我们假设以下代码: 接口个人数据{ 名称:string 年龄:数目 } 类组件{} 类PersonComponent扩展组件{} 函数foo(组件:组件,数据:任意){ //当传递如下所示的可观察对象时,如何为“data”指定正确的类型? } const personData={name:Observable.of('John'),age:Observable.of(35)} foo(新PersonComponent,personData) 换句话说:我希望能够为data参数指定一个类型,该

让我们假设以下代码:

接口个人数据{
名称:string
年龄:数目
}
类组件{}
类PersonComponent扩展组件{}
函数foo(组件:组件,数据:任意){
//当传递如下所示的可观察对象时,如何为“data”指定正确的类型?
}
const personData={name:Observable.of('John'),age:Observable.of(35)}
foo(新PersonComponent,personData)
换句话说:我希望能够为
data
参数指定一个类型,该参数接受类型
T
,但其所有值都封装在可观察值中。因此,我需要一种方法将
T
(一个对象/记录)的类型转换为同一类型,并将其所有值转换为可观察值


还有一个后续问题:是否有可能将其扩展到深度嵌套的对象层次结构

您可以使用映射类型将组件道具映射到可观察对象:

interface PersonData {
  name: string
  age: number
}

class Component<T> { p!: T}

class PersonComponent extends Component<PersonData> {}

type ObservableRecord<T> = {
    [P in keyof T]: Observable<T[P]>
}
function foo<T>(component: Component<T>, data: ObservableRecord<T>) {
}

const personData = { name: Observable.of('John'), age: Observable.of(35) }    
foo(new PersonComponent, personData) 


const personDataErr = { name: Observable.of('John'), age: Observable.of("35") }    
foo(new PersonComponent, personDataErr) // err
接口个人数据{
名称:string
年龄:数目
}
类组件{p!:T}
类PersonComponent扩展组件{}
类型ObserverRecord={
[P in keyof T]:可观测
}
函数foo(组件:组件,数据:可观察记录){
}
const personData={name:Observable.of('John'),age:Observable.of(35)}
foo(新PersonComponent,personData)
const persondaterr={name:Observable.of('John'),age:Observable.of('35')}
foo(新PersonComponent,personDataErr)//错误

这非常好。你知道这是否可能有一个分层/深层版本吗?想象一下,
PersonData
有一个字段
deep:{structure:{value:number}
,然后用
deep:{structure:{value:Observable.of(5)}
调用函数?好的,我用
[P in keyof T]:Observable | ObservableRecord
得到了它。谢谢!