首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >typescript -有没有从类型定义创建实例的方法

typescript -有没有从类型定义创建实例的方法
EN

Stack Overflow用户
提问于 2020-07-14 21:34:05
回答 1查看 84关注 0票数 1

使用Typescript,我正在尝试创建一个DI系统,并且我想使用type (或interface)作为密钥。

例如,

代码语言:javascript
复制
interface IMath {
  add: (a: number, b: number) => number;
  sub: (a: number, b: number) => number;
}
代码语言:javascript
复制
class Math implements IMath {
  add(a: number, b: number) { return a + b };
  sub(a: number, b: number) { return a - b };
}
代码语言:javascript
复制
di.register(IMath, Math); // of course this doesn't work

这在运行时类型的语言中是可能的,比如C#,类型在内存中(这是我们不想要的)。

在typescript中,所有类型数据在到达运行时之前都会被删除。

我的问题是-我们可以创建一个对象或符号,在运行时表示类型吗?

代码语言:javascript
复制
const mathId = typeToId<IMath>();
// "c8393b569dbae9ed04e5b22d9c2e6fb7"
代码语言:javascript
复制
const mathStub = typeToStub<IMath>();
// { add: () => 0, sub: () => 0 }
EN

回答 1

Stack Overflow用户

发布于 2020-07-14 21:49:47

我发现的一个类似的项目是使用babel-plugin-flow-runtimeflow-runtime。(还有一个被称为TS-runtime的TS等价物,但它看起来并不成熟)

代码语言:javascript
复制
type User = {
  id: number;
  name: string;
};

转换为

代码语言:javascript
复制
import t from 'flow-runtime';
const User = t.type('User', t.object(
  t.property('id', t.number()),
  t.property('name', t.string())
));

无论是在捆绑包大小还是性能上,这似乎都是一种过度的杀伤力。

我还在我的一个项目中尝试了它,仍然使用Flow,它给出了好坏参半的结果。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62896455

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档