假设我们具有以下接口:
interface MyInterface {
content: string;
}
由以下三个功能使用:
function fn1<T>(arg: T): void {
let local = arg;
console.log(local.content);
}
function fn2<T extends MyInterface>(arg: T): void {
let local = arg;
console.log(local.content);
}
function fn3(arg: MyInterface): void {
let local = arg;
console.log(local.content);
}
(在Playground上)
第一个正确访问local.content
时出现错误:“类型'T'不存在属性'content'”。
因此,在fn2
中,我决定使用extends MyInterface
来缩小泛型类型,以确保存在local.content
。但是fn3
呢? fn2
和fn3
之间有什么区别?
对我来说,很明显无限制地使用泛型,而我不明白为什么即使对联合类型也应使用缩小的泛型:
function fn4<T extends MyInterface | MyInterface2>(arg: T): void {
let local = arg;
console.log(local.content);
}
vs。
function fn5(arg: MyInterface | MyInterface2): void {
let local = arg;
console.log(local.content);
}
谢谢。