TypeScriptを使用して関数に出力パラメータを含めることは可能ですか? Func1(string val1, int out k1, int out k2)
C#のようなもの。
7 に答える
現在ありません。
複数のプロパティを含むオブジェクトを返すことができます。
return { k1: 5, k2: 99 };
これを破壊と組み合わせると、中間オブジェクトが見えなくなります...
function myFunction() {
return { k1: 5, k2: 99 };
}
const { k1, k2 } = myFunction();
console.log(k1);
console.log(k2);
タプルでも同じことができますが、これはかなり読みやすいです。
通常、複数のプロパティを持つオブジェクトを返すだけで、そのうちの 1 つに関数が含まれます。このようなもの:
var foo = function (val1 : string){
// do something
return {
k1: 22,
k2: 33
};
}
インターフェイスを実装することもできるので、返されるオブジェクトとして何が期待できるかがわかります。
interface IFoo {
(val1: string): INumbers;
}
interface INumbers {
k1 : number;
k2 : number;
}
var foo : IFoo = (val1 : string){
// do something
return {
k1: 22,
k2: 33
};
}
Typescript はすべてのパラメーターを「値による呼び出し」で渡します。ただし、パラメーターが参照の場合、ほとんどの場合、これは「参照による呼び出し」と同様に動作します。プリミティブ型のラッパー クラスを作成できます。ここにいくつかのコードがあります:
var func=function(param:Str){
param.str="modified";
}
class Str{
str:string="unmodified";
}
var test:Str=new Str();
alert(test.str); //alerts "unmodified"
func(test);
alert(test.str); //alerts "modified"
ただし、次の点に注意する必要があります。
var func=function(param:Str){
param=new Str("modified");
}
class Str{
str:string;
constructor(param:string){
this.str=param;
}
}
var test:Str=new Str("unmodified");
alert(test.str); //alerts "unmodified"
func(test);
alert(test.str); //alerts "unmodified"
関数パラメータは「値渡し」で渡されます。したがって、関数本体内では、参照のコピーを操作しています。この参照は、パラメーターとして渡した参照と同じオブジェクトを指しているため、そのメンバーにアクセスして変更できます。ただし、新しいオブジェクトを参照に割り当てると、それ以降のすべての変更がこの新しいオブジェクトに適用されます。したがって、上記のコードは変更されずに 2 回出力されます。C# もこのように機能すると思います。
C# のような構文を維持したい場合は、次を使用できます。
function func(val1, k1, k2)
{
k1.v = 7;
k2.v = 9;
return "";
}
そしてそれを呼び出す
func("", {}, {});