2017-09-09 8 views
0

私はtypescript(2.5.2)を学習しています。タイプの引数がTypescriptで代入可能なエラーではありません

function printPerson(person: {firstName: string; lastName: string}): void{ 
    console.log(person.firstName + " " + person.lastName); 
} 

let geo = {firstName: "geo", lastName: "porz", sex: "M"}; 
printPerson(geo); //OK here 

// TS2345 Argument of type ... is not assignable to parameter of type ... 
printPerson({firstName: "geo", lastName: "porz", sex: "M"}); 
+2

「新鮮な」オブジェクトは、 – Dummy

+0

おかげでそれを調べる必要があり、これはトリッキーなポイント https://stackoverflow.com/questions/42537727/empty-interface-allow-any-object/42542804#42542804を説明します – geo

答えて

0

ないあなたの質問に直接答えが、私はあなたが活字体でJavascriptのコーディングスタイルを使用しているため、あなたの質問が出てくると思う:最初の呼び出しはOKですが、二番目がエラーを与える理由を誰かが説明してもらえます。 Javascriptから来て、あなたは{foo:"bar"}のような構造を使ってデータを渡すのに慣れているかもしれません。 Typescriptでは、typeまたはinterfaceを使用して変数の型を宣言すると、コードの可読性が向上します。

let geo:Person = {firstName: "geo", lastName: "porz", sex: "M"}; 

は今、あなたは、同じエラーを取得します::personオブジェクトを作成し、代わりの型推論に頼るとき、今

interface Person { 
    firstName: string 
    lastName: string 
} 

function printPerson(person: Person): void{ 
    console.log(person.firstName + " " + person.lastName); 
} 

、私たちは人であるgeoコンパイラに伝えることができますそれが宣言されていないので、sexプロパティをPersonに追加しないでください。 typescriptですが呼んだ

+0

これは質問されている質問とは無関係です –

関連する問題