のは、私はこの機能(try online)を持っているとしましょう:パラメータが定義されていない場合は、未定義返す関数を入力
type Person = { name: string }
function getName(p: ?Person): ?string {
if (!p) {
return p
} else {
return p.name
}
}
const frank: Person = { name: 'Frank' }
/*
* In order to work now, this has to have a maybe type
* const name: ?string = getName(frank)
* Even though I know it will is guaranteed to be a string
*/
const name: string = getName(frank)
フローgetName
がundefined
を返すことができると思うので、私は、エラーを取得します。これが起こるだけですが、p
が定義されていないと、明らかにそうではありません。
何らかの形で関数を入力することができます。戻り値の型はundefined
で、パラメータがundefined
の場合のみ、そうでない場合は文字列ですか?そう
function getName(person) {
if (! person) {
return undefined
} else {
return person.name
}
}
const maybeFrank: ?Person = getFrank()
const definitelyMaria: Person = getMaria()
const frankName: ?string = getName(maybeFrank)
const mariaName: string = getName(definitelyMaria)
は、私は方法でそれを入力したいと思い、::私は簡単な機能を持っている :
クラリファイン例:編集
- 場合は、パラメータはJust Person、戻り値の型はJust Stringです。
- パラメータが多分人の場合、戻り値の型は多分文字列
それは可能ですか?
と機能を再宣言することができますしたい場合、私は疑問があることでしょうね、なぜ '=率直&&のgetName(率直)を行いません'へ最初に 'undefined'にならないようにしてください。 – loganfsmyth
どういう意味ですか?それは同じだろう。 'frank === undefined' =>' frank && getName(frank)=== undefined'! – MoeSattler
申し訳ありませんが、私はそれをよりうまく表現できました。私の質問は、未定義を許可しないように 'getName'を変更できますか?あなたが示したことから、「Person」を取る良い理由はあまりありません。その署名があなたの問題の核心です。 'undefined 'が入ってくることがある場合は、' unName'で 'getName'を呼び出す前にチェックする方がいいでしょう。 – loganfsmyth