find<s extends T>这行是什么作用,意思是子类也可以使用find函数吗?有没有应用场景,可以举一下例子,方便理解,谢谢大佬们
find<s extends T>这行是什么作用,意思是子类也可以使用find函数吗?有没有应用场景,可以举一下例子,方便理解,谢谢大佬们
比方说有这么两个类型:
interface Animal {
name: string
}
interface Dog extends Animal {
bark(): void
}
然后现在你有一个Animal
数组, 你想要从里面找到一个Dog
返回
function isDog(dog: Animal): dog is Dog {
return (dog as Dog).bark !== undefined
}
declare const animals: Array<Animal>;
// 这个返回的就是dog了
const dog: Dog = animals.find(isDog);
主要是数组中的元素没法限定类型统一,就可能出现有的元素是A类型,有的元素是B类型,那么查询结果可能是个联合类型,对于后续的处理可能不太方便。因此find通常需要指定泛型来表达查询到的结果应该是S类型。因此<S extends T>其实就是表达查到的元素类型依然是数组中存在的类型。有个小例子不知道表达的准不准确
interface A {
name: string
}
interface B {
age: number
}
let arr: Array<A|B> = [{name: 'jack'}]
arr.push({ age: 17})
function testA(value: A|B): value is A {
return 'name' in value && value.name === 'jack'
}
let findA = arr.find<A>(testA)
function test(value: A|B): value is B {
return 'age' in value && value.age > 10
}
let findB = arr.find<B>(test)
10 回答11.1k 阅读
6 回答3k 阅读
5 回答4.8k 阅读✓ 已解决
4 回答3.1k 阅读✓ 已解决
2 回答2.6k 阅读✓ 已解决
3 回答5.1k 阅读✓ 已解决
3 回答1.8k 阅读✓ 已解决
只是重载啊,意思是规定了新的泛型S是基于T类型的扩展。
一种是4个参数的find,一种是3个参数的find,分别定义了两个方式下参数类型和返回值的类型。