reactjs - React Typescript:反射(列出接口的属性)
问题描述
我正在为神经网络编写一个基于节点的编辑器,它(当前)使用 tensorflow.js 来创建网络本身。Tensorflow.js 有一个带有不同工厂函数的层 API,每个工厂函数都有一个接口用于它们的参数。例如
interface DenseLayerArgs {
units: number,
useBias?: boolean,
...
}
const dense(args: DenseLayerArgs): {
...
}
我的目标是自动加载所有这些工厂函数,并根据 Args 界面为每个函数创建一个菜单。由于无法访问普通 TS 中可能未定义的属性,因此解决方案似乎是某种转换器库(例如https://www.npmjs.com/package/ts-reflection)。但是我无法使用带有 typescript 设置的 create-react-app 运行任何自定义转换器。
有没有人能够让 React 与自定义转换器一起工作,或者有其他一些解决方案来从界面创建菜单?
干杯
解决方案
我推荐tst-reflect用于 TypeScript 反射。
在自述文件中,有一节如何开始。你必须使用例如。ttypescript
让变压器工作。TypeScript 不支持开箱即用的转换器,只能通过直接调用其 Compiler API 来支持。ttypescript
是某种包装,允许您在 tsconfig 中定义转换器。
如何开始的副本:
- 安装软件包。
npm i tst-reflect && npm i tst-reflect-transformer -D
- 为了使用转换器插件,您需要支持插件的 TypeScript 编译器,例如。打包ttypescript或者您可以手动使用TypeScript 编译器 API。
npm i ttypescript -D
- 将变压器添加到
tsconfig.json
{
"compilerOptions": {
// your options...
// ADD THIS!
"plugins": [
{
"transform": "tst-reflect-transformer"
}
]
}
}
- 现在只需将您的代码转换
ttsc
为tsc
npx ttsc
和 Webpack 的用法:
修改你的 webpack 配置。用于设置编译器options.compiler
。ts-loader
ttypescript
({
test: /\.(ts|tsx)$/,
loader: require.resolve("ts-loader"),
options: {
compiler: "ttypescript"
}
})
以及如何列出接口的属性tst-reflect
?
import { getType, Property} from "tst-reflect";
interface DenseLayerArgs {
units: number,
useBias?: boolean,
// ...
}
const properties: Array<Property> = getType<DenseLayerArgs>().getProperties();
// Do something with properties...
Property
是:
interface Property
{
/**
* Property name
*/
readonly name: string;
/**
* Property type
*/
readonly type: Type;
/**
* Optional property
*/
readonly optional: boolean;
/**
* Access modifier
*/
readonly accessModifier: AccessModifier;
/**
* Accessor
*/
readonly accessor: Accessor;
/**
* Readonly
*/
readonly readonly: boolean;
/**
* Returns array of decorators
*/
getDecorators(): ReadonlyArray<Decorator>;
}
推荐阅读
- mysql - 在 MySQL 中将具有月份名称和年份的列转换为格式为 YYYYMM 的整数
- calculator - 如何开始我的这个应用程序的代码(Swift 中的期末成绩计算器)?
- jquery - 获取类型错误:$(...)[0] 未定义
- numpy - 数组很适合可用的 RAM,但是在调用 numpy.take 时仍然会出现内存错误
- sql - 选择语句中的重复数据
- header - 抑制来自系统标头的警告不起作用
- signal-processing - 在 Chisel 中构建 DspComplex ROM
- javascript - 如何解决“未捕获的 SyntaxError:JSON 中位置 0 的意外标记 l ...?”
- oracle - 使用过程但不使用 plsql 块创建 Oracle 序列时获得足够的权限
- tensorflow - Tensorflow XLA 和 Tensorflow Lite / Android NNAPI 有什么区别?