타입스크립트 파일 간 문맥 교환?

비쥬얼 스튜디오 코드를 이용해 아래 같은 코드를 만들었습니다.

// class.ts
abstract class Human {
  constructor(
    protected name: string,
    protected age: number,
    protected gender: string
  ) {}

  abstract intro(): void;
  abstract letKnowGender(): void;

  static test(): void {
    console.log("yeah");
  }
}

Human.test();

class User extends Human {
  public intro() {
    console.log(`I'm ${this.name} and I'm ${this.age} year's old.`);
  }

  public letKnowGender(): void {
    console.log(`I'm ${this.gender}.`);
  }
}

const man1 = new User("Idooru", 25, "male");

man1.intro();
man1.letKnowGender();

그리고 아래에도 타입스크립트로 코드를 만들었습니다.

// literal.ts
const userName1 = "Bob";
let userName2: string | number = "Tom";

userName2 = 3;

type Job = "police" | "developer" | "teacher";

interface User {
  name: string;
  job: Job;
}

이해가 안가는게 있는데 literal.ts에서 User가 빨간줄이 쳐저 에러로 판단했지만 컴파일은 전혀 지장이 없습니다. 에러내용은
아래와 같습니다.

‘User’ 인터페이스가 ‘Human’ 인터페이스를 잘못 확장합니다.
‘name’ 속성은 보호된 속성이지만 ‘User’ 형식은 'Human’에서 파생된 클래스가 아닙니다.ts(2430)

자세히 보니 두 파일간에 "User"라는 키워드가 겹칩니다. 제가 타입스크립트를 배운지 얼마 안되서 이해가 안가지만 두 파일은 따로 분리되어있는데 "User"키워드가 겹친다고 에러를 나타내는 이유가 궁금합니다. 컴파일은 잘됩니다.