我正在为电视节目和电影制作一个搜索引擎,它正在工作,但我现在遇到的唯一问题是
media_type
必须硬编码为 "tv"
或 "movie"
。
如果我将其设置为
"tv"
,那么它会显示电视节目的详细信息,但我看不到电影详细信息,如果我将其设置为"movie"
,它只会显示电影的详细信息,但不会显示电视节目的详细信息。我需要它动态地为两者工作。
URL 的格式将类似于以下任一格式:
localhost:3000/tv/1434
localhost:3000/movie/65215
getMediaDetails: async ({
mediaId,
media_type
}: {
mediaId: number | null;
media_type?: "movie" | "tv";
}) => {
if (!mediaId) {
throw new Error("Media ID must be provided.");
}
const endpoint = `${media_type}/${mediaId}`;
const response = await httpClient
.get(endpoint, {
searchParams: {
append_to_response: "credits",
language: "en-US"
}
})
.json<MediaDetailsResponse>();
response.name = response.title || response.name; // Unified 'name' attribute
return response;
}
文字是集体类型的更具体的子类型。这意味着
"Hello World"
是 string
,但 string
在类型系统中不是
"Hello World"
。
如果您使用
var
或 let
声明变量,例如:
let mediaType = "movie";
并将此变量
mediaType
传递给 getMediaDetails()
,Typescript 会推断它是 string
,因此这将不起作用。 [1]
但是使用
const
声明变量会通知 TypeScript 该对象永远不会改变,因此 TypeScript 可以正确地将类型设置为 "Hello World"
和 not string
。
但是使用
const
和硬编码一样好,不是吗?更好的解决方案是声明一个实际的 type
例如:
type MediaType = "movie" | "tv";
现在在
getMediaDetails()
中,使用实际的type
:
/* •••Rest of code•••*/
media_type?: MediaType;
/* •••Rest of code•••*/
正确的变量声明是:
let mediaType: MediaType = "movie";
[1] 请记住,
"Hello World"
是 string
,但 string
在类型系统中不是
"Hello World"
。