Good Code
The good version makes it clear that PullRequest is only a type dependency while formatAuthorName is a runtime value dependency.
Lesson 10
Separate type dependencies from runtime dependencies so modules stay lightweight.
import type { PullRequest } from "./pull-request";
import { formatAuthorName } from "./authors";
export function getReviewCardTitle(pullRequest: PullRequest) {
// import type keeps PullRequest out of the runtime dependency graph.
return pullRequest.title + " by " + formatAuthorName(pullRequest.authorId);
}import { PullRequest } from "./pull-request";
import { formatAuthorName } from "./authors";
export function getReviewCardTitle(pullRequest: PullRequest) {
// A value import blurs type-only and runtime dependencies.
return pullRequest.title + " by " + formatAuthorName(pullRequest.authorId);
}The good version makes it clear that PullRequest is only a type dependency while formatAuthorName is a runtime value dependency.
The bad version imports a type like a runtime value, which can blur module boundaries and create unnecessary runtime coupling depending on compiler settings.