Typescript ジェネリック制約
はじめに: 一般的な制約には 2 つのタイプがあり、より具体的なタイプを指定するものと、制約を追加するものがあります。
質問:
ここでは、ジェネリック関数を使用してイベント パラメーターの長さにアクセスし、エラーを報告します。
問題を解く:
(1). より具体的なタイプを指定するために使用します
function numtion<T>(event: T[]): T[] {
console.log(event.length);
return event
}
numtion(['aa'])
ここでは、仮パラメータの型の後に特定の型を指定する配列を追加し、戻り値の型に配列を追加します [ ]
配列にアクセス可能な長さ属性が必要である限り、型を T[] に変更します
理由の説明: デフォルトでは、ジェネリック関数の型変数は複数の型を表すことができ、どのプロパティにもアクセスできません。
説明:
T は任意の型を表すことができ、Length プロパティが存在しなければならないという保証はありません
この時点で、ジェネリック関数に制約を追加して型を縮小する必要があります
(2) 制約を追加する
interface myinterface {
length: number
}
function numtion<T extends myinterface>(event: T): T {
console.log(event.length);
return event
}
numtion('aa')
これが解決策です interface を使用してインターフェイス名を宣言し、長さの型を指定し、最後に <T extends myinterface> extends でインターフェイス名を追加します
説明:
説明の制約を作成します インターフェイスの長さ インターフェイスは長さのプロパティを提供します
インターフェイスを使用して、extend を介してジェネリックに制約を追加します
制約は、渡された型に長さプロパティが必要であることを示しています