gpt4 book ai didi

typescript - 是否可以添加一个包装值的泛型类型?

转载 作者:搜寻专家 更新时间:2023-10-30 21:45:06 24 4
gpt4 key购买 nike

让我们假设这段代码:

interface PersonData {
name: string
age: number
}

class Component<T> {}

class PersonComponent extends Component<PersonData> {}

function foo<T>(component: Component<T>, data: any) {
// How to specify the correct type for `data` when passing observables as shown below?
}

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

foo(new PersonComponent, personData)

换句话说:我希望能够为 data 参数指定一个类型,该参数接受 T 类型,但它的所有值都包含在 Observables 中。因此,我需要一种方法来将 T(它是一个对象/记录)的类型一般转换为相同类型,并将其所有值都转换为 Observables。

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

最佳答案

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

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

关于typescript - 是否可以添加一个包装值的泛型类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56924582/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com