今天要来介绍 泛用型别
,在我们前面介绍的 型别化名
,而 泛用型别
就是将 型别化名
参数化,接下来我们将型别带入 泛用型别
,就会获的该型别的结果,究竟是如何使用呢? 让我们来继续看下去。
我们使用 type
来将 tryIt
指定一个 泛用型别
并带一个参数为 T
,使用如下:
type tryIt<T> = {
value: T;
};
let x:tryIt<String>
x = { value: 'cy'} // pass
x = { value: 11 } // 喷错
从这个范例我们可以得知,变数宣告 x 时,将 tryIt
泛用型别中的 T
参数带入 String
,当我们 value
的值带入数字,TypeScript 将会提醒我们错误。
interface tryValue<T> {
value: T;
}
const oneTest = (x: tryValue<String>): String => {
return x.value
}
console.log(oneTest({value: 'cy'})) // 'cy'
interface tryValue<T extends number> {
value: T
}
// 有给 tryValue 参数 10,且为 number, pass
const twoTest = (x: tryValue<10>): tryValue<10> => {
return x
};
// 没给参数, 喷错
const twoTest = (x: tryValue): tryValue => {
return x
};
// 参数为错误型别, 喷错
const twoTest = (x: tryValue<true>): tryValue<true> => {
return x
};
经由 extends
我们可以更严格限制所要带入参数为何。
function combo<T extends number[]>(cy: T) {
return function lastCombo<K extends String>(will: K) {
return [cy, will];
};
}
const myCombo = combo([28])('omg');
今天稍微介绍一下 泛用型别
常用的地方,还有很多结合使用的地方,大家可以一起探索更多使用方式。
通道Channel Channel可以想像成是一种资料结构,可以push data进去也可以pull...
待完成... ...
Cache and TLB Flushing Under Linux 的最後一部份,一样文件! 文件...
刚开始学JavaScript的时候,在书上看到事件绑定的范例: //HTML <a id=&...
上篇文章中,我提出了一个「规画系统」,其系统的起始点,是由 PO 与 Designer 组成的子系统...