Type Script汎型
2603 ワード
汎型の概念
あらかじめ定められていないデータの種類を指し、具体的なタイプは使う時に決められます.ちょっとお聞きしたいのですが、JavaScript自体はこのように感じられますか?これは理解が間違っているからです.前に「使用時に確定する」と言っていますが、プログラム実行時に確定するのではありません.
汎関数
必要なものがあります.定義された関数は元々入力文字列出力文字列で、入力出力文字列配列を同時にサポートしたいです.どうやって実現しますか?
1.関数での再ロード
クラスのメンバーを制約し、静的なメンバーを拘束しないように注意する.
一般的な制約とは、着信パラメータが制約に適合していなければならず、制約に適合していないパラメータが着信できないことをいう.
汎型を使うとどんなメリットがありますか?関数およびクラスは、様々なタイプをサポートし、プログラムの拡張を強化することができる. は、複数の関数を書き換える必要がなく、長いタイプの共同声明でコードの読み取り可能性を向上させる. フレキシブル制御タイプ間の制約
あらかじめ定められていないデータの種類を指し、具体的なタイプは使う時に決められます.ちょっとお聞きしたいのですが、JavaScript自体はこのように感じられますか?これは理解が間違っているからです.前に「使用時に確定する」と言っていますが、プログラム実行時に確定するのではありません.
汎関数
必要なものがあります.定義された関数は元々入力文字列出力文字列で、入力出力文字列配列を同時にサポートしたいです.どうやって実現しますか?
1.関数での再ロード
//
function log(value: string): string;
function log(value: string[]): string[];
function log(value: any): any{
console.log(value);
return value;
}
log("abc");
log(["10","abc"]);
2.連携パラメータを使用するfunction logs(value: string | string[]): string | string[]{
return value
}
以上の二つはOKですが、簡潔さが足りなくて、柔軟性が足りません.以下は汎型を使います.function log1(value: T): T{
return value
}
let log1 = (value: T) => {
return value
};
log1("hello"); //
log1(["hi","ha"]);
コアインターフェース// , ,
interface Log {
(value: T): T;
}
let log3: Log = (v) => { console.log(" ",v);return v };
log3(12);
interface Log{
(value: T): T;
}
let log3: Log = (v) => { console.log(" ",v);return v};
log3(10); // , ,
log3(5);
汎型類クラスのメンバーを制約し、静的なメンバーを拘束しないように注意する.
class Log {
run(value: T) {
console.log(value);
return value
}
}
let log1 = new Log(); //
log1.run(1);
let log2 = new Log(); //
log2.run("2");
汎型制約一般的な制約とは、着信パラメータが制約に適合していなければならず、制約に適合していないパラメータが着信できないことをいう.
function log(value: T):T{
console.log(value.length); // .length ,TS , value
return value
}
interface Length {
length: number;
type?: string;
}
// extends Length value . Length
function log(value: T): T{
console.log(value, value.length,value.type);
return value
}
// length , log
log([1,2,3]);
log("123");
log({length: 1});
この例では、着信を制約するパラメータは、length属性を持たなければならない.汎型を使うとどんなメリットがありますか?