如何覆盖默认类型?

dre*_*att 7 typescript reactjs

我正在研究可访问性并认为"我只是alt在我的项目中创建一个必需的属性." 我的目标是,img如果alt没有提供属性,我的反应应用中的所有标签都会抱怨.所以,我创建了一个.d.ts文件,其中添加了以下内容:

import { HTMLAttributes } from 'react';

declare module 'react' {
  export interface ImgHTMLAttributes<T> extends HTMLAttributes<T> {
    alt: string;
  }
}
Run Code Online (Sandbox Code Playgroud)

我收到这些错误:

'alt'的所有声明必须具有相同的修饰符.

后续属性声明必须具有相同的类型.属性'alt'必须是'string |类型 undefined',但这里有'string'类型.

有没有办法表明我试图覆盖,而不是扩展?或者有更好的方法来解决这个问题吗?

Nur*_*yev 0

我想这是不可能的,因为 Typescript 认为你的类型和 node_modules 中的类型没有区别(按层次结构)。

所以我通常会定义自己的类型,一切都很好:

import { ImgHTMLAttributes } from 'react';

export interface IMyImgHTMLAttributes extends ImgHTMLAttributes<any> {
  alt: string;
}
Run Code Online (Sandbox Code Playgroud)

PS 但是,我不知道这是否适合您的特殊情况(我对 React 不够熟悉)。