typescript intersection types override