我正在声明其他元素类型应该满足的“父”COMPONENT 类型。如果我在普通的 .ts 或 .tsx 文件中使用下面的代码,它可以正常工作(也就是说,它会告诉我不能使用类型“hero”,因为它不是 ELEMENT_TYPE 的一部分)。 然而,在声明文件中,这不起作用。
如何声明泛型类型,然后将其用作“模具”以将其他更具体的类型放入声明文件中?
declare type ELEMENT_TYPE = "div" | "p" | "h1" | "button";
declare type COMPONENT = {
type: ELEMENT_TYPE;
children: (COMPONENT | string)[];
};
declare type Satisfies<T, U extends T> = U;
declare type HERO = Satisfies<
COMPONENT,
{
type: "hero";
children: (COMPONENT | string)[];
}
>; // should throw error but does not in declaration (.d.ts) file
我的 tsconfig 文件如下所示:
{
"compilerOptions": {
"target": "es5",
"lib": ["dom", "dom.iterable", "esnext"],
"allowJs": true,
"skipLibCheck": true,
"strict": true,
"forceConsistentCasingInFileNames": true,
"noEmit": true,
"esModuleInterop": true,
"module": "esnext",
"moduleResolution": "node",
"resolveJsonModule": true,
"isolatedModules": true,
"jsx": "preserve",
"incremental": true,
"plugins": [
{
"name": "next"
}
],
"paths": {
"@/*": ["./*"]
}
},
"include": ["next-env.d.ts", "**/*.ts", "**/*.tsx", ".next/types/**/*.ts"],
"exclude": ["node_modules"]
}