You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
这里,GenericNumber<T> 类具有一个类型为 T 的属性 zeroValue 和一个用两个 T 类型参数返回 T 类型的方法 add。
泛型约束
有时你可能希望对泛型进行限制,只允许使用满足特定接口的类型。这称为泛型约束。
interfaceLengthwise{length: number;}functionloggingIdentity<TextendsLengthwise>(arg: T): T{console.log(arg.length);// Now we know it has a .length property, so no more errorreturnarg;}
在这里,我们约束了类型 T 必须遵从 Lengthwise 接口,确保传入的类型具有 length 属性。
泛型中使用类型参数
你还可以在泛型中使用类型参数本身。
functiongetProperty<T,KextendskeyofT>(obj: T,key: K){returnobj[key];}letx={a: 1,b: 2,c: 3};getProperty(x,"a");// OkaygetProperty(x,"m");// Error: Argument of type '"m"' isn't assignable to '"a" | "b" | "c"'
在这个示例中,getProperty 函数有两个参数:obj 和 key,obj 是对象 T,key 是 T 中键的集合 keyof T 的成员。
关键词:TS 泛型
TypeScript 的泛型是一种工具,它能够使代码更加灵活,能够适配多种类型而非单一的类型。泛型可以创建可重用的组件,这些组件可以支持多种类型的数据,而不失去类型检查时的安全性。
泛型的基本概念
在 TypeScript 中, 泛型使用一个类型变量,常见的类型变量有
T
,U
,V
等。通过类型变量,你可以创建一个可以适应任何类型的组件(比如函数、接口或类)。类型变量像是函数或类的一个特殊参数,但这个参数是类型而非具体的值。泛型的使用场景
这里
T
用作类型变量,可以捕获用户提供的类型(比如number
),然后这个类型将被用于函数的参数和返回类型。这里
GenericIdentityFn
接口定义了一个属性,它是一个接收T
类型参数并返回T
类型的函数。type
关键字可以用来创建类型别名,它确实支持泛型。你可以为类型别名定义泛型参数,然后在使用该类型别名时指定具体的类型。下面是使用泛型的类型别名的例子:
通过使用泛型,
type
可以定义灵活的类型别名,使得别名能够用于各种不同的数据类型,同时保持类型的安全性。这使得你可以在类型别名中使用泛型来捕获传递给别名的类型信息。这里,
GenericNumber<T>
类具有一个类型为T
的属性zeroValue
和一个用两个T
类型参数返回T
类型的方法add
。泛型约束
有时你可能希望对泛型进行限制,只允许使用满足特定接口的类型。这称为泛型约束。
在这里,我们约束了类型
T
必须遵从Lengthwise
接口,确保传入的类型具有length
属性。泛型中使用类型参数
你还可以在泛型中使用类型参数本身。
在这个示例中,
getProperty
函数有两个参数:obj
和key
,obj
是对象T
,key
是T
中键的集合keyof T
的成员。通过泛型,TypeScript 允许你在保持类型安全的同时创建灵活,可适用于多种类型的组件。这样你就能够写出更加通用且易于复用的代码。
The text was updated successfully, but these errors were encountered: