Type Script(七):汎用
2616 ワード
1汎用ベース
汎用型とは、関数やインタフェースを定義する際に、タイプを指定せずに使用する場合にのみ、タイプを指定する特徴で、プレースホルダに相当します.例1、簡単な例 例2、2つのパラメータ交換位置
2汎用拘束
関数が汎用を使用する場合、パラメータにlengthプロパティを持たせるには、汎用制限を直接使用する場合、次の例でエラーが発生します.
この場合、パラメータをコンストレイントするか、限定する必要があります.ソリューション1では、パラメータはオブジェクトを使用します.オブジェクトにlengthプロパティがあるため、次のようになります.
この方法はあまりよくありません.stringに伝えたい場合、またはオブジェクトが間違っているからです.
ソリューション2、
3汎用、クラス、インタフェースクラス汎用 を使用インタフェースは汎用 を使用する.オブジェクト使用インタフェース汎用 インタフェースは、関数のタイプ を記述する.
汎用型とは、関数やインタフェースを定義する際に、タイプを指定せずに使用する場合にのみ、タイプを指定する特徴で、プレースホルダに相当します.
//
function echo(arg: T): T {
return arg
}
const result1: boolean = echo(true)
const result2: number = echo(111)
function swap(tuple: [T, U]): [U, T] {
return [tuple[1], tuple[0]]
}
const result3 = swap(['string', 123])
2汎用拘束
関数が汎用を使用する場合、パラメータにlengthプロパティを持たせるには、汎用制限を直接使用する場合、次の例でエラーが発生します.
function echoWithArr1(arg: T): T {
console.log(arg.length) // Property 'length' does not exist on type 'T'
return arg
}
この場合、パラメータをコンストレイントするか、限定する必要があります.ソリューション1では、パラメータはオブジェクトを使用します.オブジェクトにlengthプロパティがあるため、次のようになります.
function echoWithArr(arg: T[]): T[] {
console.log(arg.length)
return arg
}
const arrs = echoWithArr([1, 2, 3])
この方法はあまりよくありません.stringに伝えたい場合、またはオブジェクトが間違っているからです.
ソリューション2、
を使用:キーワードextendsinterface IWithLength {
length: number
}
function echoWithLength(arg: T): T {
console.log(arg.length)
return arg
}
const str = echoWithLength('str')
const obj = echoWithLength({ length: 10, width: 10})
const arr2 = echoWithLength([1, 2, 3])
3汎用、クラス、インタフェース
class Queue {
private data = [];
push(item: T) {
return this.data.push(item)
}
pop(): T {
return this.data.shift()
}
}
const queue = new Queue()
queue.push(1) // ,
console.log(queue.pop().toFixed())
const queue2 = new Queue()
queue2.push('str') // ,
console.log(queue2.pop().length)
interface KeyPair {
key: T;
value: U;
}
let kp1: KeyPair = { key: 123, value: "str" }
let kp2: KeyPair = { key: 'test', value: 123 }
let arr: number[] = [1, 2, 3]
let arrTwo: Array = [1, 2, 3] // Array ,
interface IPlus {
(a: T, b: T) : T
}
function plus(a: number, b: number): number {
return a + b;
}
const a: IPlus = plus // a , plus
function connect(a: string, b: string): string {
return a + b
}
const b: IPlus = connect // b , connect