typescriptで既存の型を拡張する場合 interfaceを使って例えばsum関数であれば

interface Array<T>{
   sum():number;
}

Array.prototype.sum = function(){
   return this.reduce((i,j)=>i+j)
};

このように書けますが、上記の場合 number|stringの配列

[1,2,3,"4"].sum() //64

と書いてもコンパイルエラーになりません(当たり前ですが)
Array< number >にのみsumを追加させ
他の型ではコンパイルエラーにさせたいのですが可能でしょうか。


var a = [1,2,3,"4"].sum()
で a が コンパイル前はnumber型ですが実行時の型がstringと
間違った型になってしまいます。