javascript - 为什么允许使用 kebab-case 非标准属性,而不允许使用其他属性?以及如何在 TypeScript 中定义这样的类型?

标签 javascript reactjs typescript vue.js jsx

使用 foo作为属性引发错误:

// App.tsx
//                     👇 throws
const App = () => <div foo></div>

export default App
Type '{ foo: true; }' is not assignable to type 'DetailedHTMLProps<HTMLAttributes<HTMLDivElement>, HTMLDivElement>'.
  Property 'foo' does not exist on type 'DetailedHTMLProps<HTMLAttributes<HTMLDivElement>, HTMLDivElement>'.ts(2322)
但是使用 foo-foo很好,这是为什么呢?
// App.tsx
//                     👇 no error is thrown
const App = () => <div foo-foo></div>

export default App
最重要的是,如何在 TypeScript 中定义这样的类型?即只允许标准或 kebab-case 属性。

最佳答案

答案在 JSX section of the Typescript Handbook :

If an attribute name is not a valid JS identifier (like a data-* attribute), it is not considered to be an error if it is not found in the element attributes type.


JSX 的整个部分是一本非常有启发性的读物。
恐怕“如何在 TypeScript 中定义这样的类型”问题的答案是......我们没有。 JSX 支持内置在编译器中。然而,我们可以定制很多有趣的东西。

关于javascript - 为什么允许使用 kebab-case 非标准属性,而不允许使用其他属性?以及如何在 TypeScript 中定义这样的类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67673754/

相关文章:

javascript - 如何在 python BeautifulSoup 或任何其他模块中获取 javascript 输出

javascript - 在 C# Web 浏览器中使 javascript 变量全局作用域

javascript - 可以用JS读取浏览器历史记录吗?

reactjs - React-Router - 如何自动将当前参数传递给 "<Link>"?

javascript - 动画面板一直显示

typescript - VS Code Intellisense 非常慢

javascript - 遍历对象数组以查找具有匹配属性的对象

javascript - React-Native 改变 <Image/> 来源与状态

TypeScript 数组包含检查导致错误

reactjs - 如何将父属性类型检查传播给子元素