声明文件中的类型继承

问题描述 投票:0回答:1

我正在声明其他元素类型应该满足的“父”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"]
}

typescript
1个回答
0
投票

如果您希望 TypeScript 检查您的声明文件,那么您应该禁用

--skipLibCheck
编译器选项

© www.soinside.com 2019 - 2024. All rights reserved.