Use .includes(params[key] as string) (o .includes(<string>params[key]) ) para decirle a Typescript que sabe que es una cadena.
primero verifique si params[key] está definido
if (params && params[key]) {...Typescript está entendiendo que su propiedad representada por params[key] tiene un tipo de array o una string , la propiedad incluso no está undefined porque tal vez key no existe en su objeto.
Primero podría verificar si la propiedad existe. Luego, podría verificar si el tipo de su propiedad es una string esta manera.
if (params[key] && typeof params[key] === string && !value.includes(params[key])) return false; Lo ideal sería que tuvieras un padre if bloquearas así.
if(params[key] && typeof params[key] === string){ //The property exists and if of type string, do your thing with it. if (!value.includes(params[key])) return false; }else{ //Why it's not the type you expected? //Do something, log or throw an error for example } De esta manera, Typescript sabe que solo llegará al niño if la propiedad params[key] es realmente una cadena, y luego el verificador/compilador de TypeScript no se quejará de esa incertidumbre.