1
私は共通インターフェイス(以下Common
)から3つのインターフェイス(A
、B
、およびC
)をすべて持っています。私はまた、これら3つのインターフェイス(以下Container
)の配列を含むコンテナの種類があります。Typescriptの継承インターフェイスとリテラル文字列タイプのキーエラー
getCommonに示したように、私は `)(、アレイのうちの1つをつかむと、オブジェクトから共通プロパティを摘み取るたい:
しかし、活字体2.1は、私のコンパイルを与えているinterface Common {
common: boolean;
}
interface A extends Common {
a: A[];
}
interface B extends Common {
b: B[];
}
interface C extends Common {
c: C[];
}
type Container = {
a: A[],
b: B[],
c: C[]
};
let item: Container = {
a: [ { a: [], common: true } ],
b: [ { b: [], common: true } ],
c: [ { c: [], common: true } ]
};
type Key = 'a' | 'b' | 'c';
function getCommon (thisKey: Key) {
return item[thisKey].map(a => a.common); // This line has an error
}
エラー:
Cannot invoke an expression whose type lacks a call signature.
Type '{ <U>(this: [A, A, A, A, A], callbackfn: (value: A, index: number, array: A[]) => U,
thisArg?: an...' has no compatible call signatures.
これはTypescriptのバグ/制限ですか、何か間違っていますか?
だから、根本的な問題は、TSコンパイラが 'A [] | B [] 'は' map'プロパティを持っていますが、 '(A | B)[]'はそうすると思いますか?前者のタイプは後者よりも何が起こっているのかを実際に表しているので、それはバマーです(バグのようです)。 – jkjustjoshing
これは望ましくない動作のように思われるので、https://github.com/Microsoft/TypeScript/issues/13097を作成しました。コミュニティ/コアチームがそれについて語っていることがわかります! – jkjustjoshing