Typescript - 条件映射类型
Typescript - conditional mapped types
我想使用 Knockout observables 将普通的旧 Javascript 类型映射到等效类型。
interface KnockoutObservableArray<T> { }
interface KnockoutObservable<T> { }
class CustomerDto {
Name: string;
PetLicenseNumbers: number[];
}
// manually mapped to Knockout-equivalent
class CustomerDtoKo {
Name: KnockoutObservable<string>;
PetLicenseNumbers: KnockoutObservableArray<number>;
}
我正在尝试使用映射类型来自动执行上述操作,但我做不到
找到一种有条件地将数组映射到 KnockoutObservableArray<U>
的正确方法
将标量映射到 KnockoutObservable<U>
type KnockoutType<T> = {
//[K in keyof T] : KnockoutObservableArray<T[K][0]>
[K in keyof T] : KnockoutObservable<T[K]>
}
type CustomerDtoKo2 = KnockoutType<CustomerDto>;
// gives
type CustomerDtoKo2 = {
Name: KnockoutObservable<string>,
PetLicenseNumbers: KnockoutObservable<number[]> // should be KnockoutObservableArray<number>
}
如你所料,conditional types会帮助你:
type KnockoutType<T> = {
[K in keyof T]: T[K] extends Array<infer U> ?
KnockoutObservableArray<U> : KnockoutObservable<T[K]>
}
祝你好运!
我想使用 Knockout observables 将普通的旧 Javascript 类型映射到等效类型。
interface KnockoutObservableArray<T> { }
interface KnockoutObservable<T> { }
class CustomerDto {
Name: string;
PetLicenseNumbers: number[];
}
// manually mapped to Knockout-equivalent
class CustomerDtoKo {
Name: KnockoutObservable<string>;
PetLicenseNumbers: KnockoutObservableArray<number>;
}
我正在尝试使用映射类型来自动执行上述操作,但我做不到
找到一种有条件地将数组映射到 KnockoutObservableArray<U>
的正确方法
将标量映射到 KnockoutObservable<U>
type KnockoutType<T> = {
//[K in keyof T] : KnockoutObservableArray<T[K][0]>
[K in keyof T] : KnockoutObservable<T[K]>
}
type CustomerDtoKo2 = KnockoutType<CustomerDto>;
// gives
type CustomerDtoKo2 = {
Name: KnockoutObservable<string>,
PetLicenseNumbers: KnockoutObservable<number[]> // should be KnockoutObservableArray<number>
}
如你所料,conditional types会帮助你:
type KnockoutType<T> = {
[K in keyof T]: T[K] extends Array<infer U> ?
KnockoutObservableArray<U> : KnockoutObservable<T[K]>
}
祝你好运!