Typescript 基于输入参数类型的类型脚本类型
我正试着做如下的事情Typescript 基于输入参数类型的类型脚本类型,typescript,generics,typescript-generics,Typescript,Generics,Typescript Generics,我正试着做如下的事情 const useTeams=(urlFriendlyNameOrId?:字符串)=>{ const[team,settam]=useState(); //在useState内部,我希望它计算为是否有提供的字符串 //我尝试过useState()将始终为我提供团队[] //我已经尝试过useState我不会直接回答这个问题,因为我认为您在这里走错了方向。不可能使用条件挂钩,这意味着如果您的挂钩可以同时处理-array和单个对象,这也是类型定义 由于要缩小类型的范围,唯一的方
const useTeams=(urlFriendlyNameOrId?:字符串)=>{
const[team,settam]=useState();
//在useState内部,我希望它计算为是否有提供的字符串
//我尝试过useState()将始终为我提供团队[]
//我已经尝试过useState我不会直接回答这个问题,因为我认为您在这里走错了方向。不可能使用条件挂钩,这意味着如果您的挂钩可以同时处理-array和单个对象,这也是类型定义
由于要缩小类型的范围,唯一的方法是设置类型保护,因此不能使用钩子来完成,因此需要在初始化后设置类型保护
看看下面的代码,我认为这是您真正想要做的:
// just example type as you haven't provided such
type Team = {
name: string;
}
function useTeams(urlFriendlyNameOrId?: string) {
const [teams, setTeams] = useState<Team | Team[]>(
urlFriendlyNameOrId ? {name: urlFriendlyNameOrId} : []);
if (Array.isArray(teams)) {
teams // array
} else {
teams // single team
}
}
看看我关于这个主题的文章-你在这里做错了什么,你想要达到什么更广泛的背景?我关心的是-你应该无条件地初始化hook,因为这是规则,这意味着hook应该始终与unionTeam | Team[]打交道
,你不能在初始化级别缩小范围,你可以在初始化之后这样做。是的,我想我对我想要的东西太笼统了。我想要一个一般情况,如果你不提供URL,它将返回所有团队,而如果你提供URL,它将只返回该团队。我可能想把它分成两个不同的挂钩或者重构它。
function useTeams(urlFriendlyNameOrId?: string) {
const [teams, setTeams] = useState<Team[]>(
urlFriendlyNameOrId ? [{name: urlFriendlyNameOrId}] : []);
teams // it can be or empty or one element array of teams
}