2016-11-09 12 views
0

入力オブジェクトは出力オブジェクトと同じですが、値は異なるように関数を入力するにはどうすればよいですか?入力オブジェクトの変換

//a has type { a: number;b: number } 
let a = { 'a': 1, 'b': 1 }; 
interface IDictNumber { 
    [key: string]: number; 
} 
interface IDictString { 
    [key: string]: string; 
} 
function convert(f: IDictNumber) { 
    return Object.keys(f) 
     .reduce((p, v) => { 
      p[v] = `${f[v]}`; 
      return p; 
     }, 
     {} as IDictString); 
} 
//b has type IDictString, but I wanted it to have { a: string;b: string } 
let b= convert(a); 

答えて

2

これは活字体2.1で可能になりました:私は、 `{「Cに変換呼ぶようなので、仕事を文句を言わない

//a has type { a: number;b: number } 
let a = { 'a': 1, 'b': 1 }; 
type Convert<T,K> = { 
    [P in keyof T]: K; 
}; 
function convertToString<T>(f: T) { 
    let a = <(keyof T)[]>Object.keys(f); 
    return a.reduce((p, v) => { 
      p[v] = `${f[v]}`; 
      return p; 
     }, 
     {} as Convert<T, string>); 
} 
let b = convertToString(a); 
0

あなたはこのためにジェネリックを使用することができます。

let a = { 'a': 1, 'b': 1 }; 

interface A<T extends string|number> { 
    [key: string]: T; 
    a: T, 
    b: T 
} 

function convert(f: A<number>) { 
    return Object.keys(f) 
     .reduce((p, v) => { 
       p[v] = `${f[v]}`; 
       return p; 
      }, 
     {} as A<string>); 
} 

let b = convert(a); 
+0

いいえ、 ':23、' d ':45} 'を実行し、正しいタイプのバックを取得しない – Cine

関連する問題