相关疑难解决方法(0)

使用Typescript检查接口类型

这个问题是使用TypeScript直接类比检查Class类型

我需要在运行时找出类型为any的变量实现接口.这是我的代码:

interface A{
    member:string;
}

var a:any={member:"foobar"};

if(a instanceof A) alert(a.member);
Run Code Online (Sandbox Code Playgroud)

如果您在typescript playground中输入此代码,则最后一行将被标记为错误,"当前范围中不存在名称A".但事实并非如此,该名称确实存在于当前范围内.我甚至可以在var a:A={member:"foobar"};没有编辑投诉的情况下将变量声明更改为.浏览网页并在SO上找到另一个问题后,我将界面更改为类,但后来我无法使用对象文字来创建实例.

我想知道A类型是如何消失的,但是看看生成的javascript解释了这个问题:

var a = {
    member: "foobar"
};
if(a instanceof A) {
    alert(a.member);
}
Run Code Online (Sandbox Code Playgroud)

A没有表示作为接口,因此不可能进行运行时类型检查.

我知道javascript作为一种动态语言没有接口的概念.有没有办法输入接口检查?

打字稿操场的自动完成显示打字稿甚至提供了一种方法implements.我怎么用呢?

javascript compiler-construction interface web typescript

244
推荐指数
15
解决办法
19万
查看次数

如何在Typescript中解析JSON字符串

有没有办法在Typescript中将字符串解析为JSON.
示例:在JS中,我们可以使用JSON.parse().在Typescript中有类似的功能吗?

我有一个JSON对象字符串,如下所示:

'{"name":"Bob","error":false}'

javascript string json typescript

63
推荐指数
5
解决办法
13万
查看次数

检测对象是否在动态中实现TypeScript接口

有什么办法,我如何检测某个对象是否实现了某个接口?

if(myObj implements IMyInterface) {
    //... do something
}
Run Code Online (Sandbox Code Playgroud)

typescript

22
推荐指数
2
解决办法
8295
查看次数

在运行时针对TypeScript中的接口验证"任何"对象

我正在使用typescript处理应用程序的UI.与此同时,其他人也在为我提供数据.我们就数据合同达成了一致意见,但是这个过程很容易出错,我不断从服务器获取无效的数据对象.所以我的问题是我可以使用typescript中定义的一些接口以某种方式验证动态对象(在运行时)吗?


这个问题是在2012年提出的,因此它不能重复检查一个对象是否在运行时使用 2015年提出的TypeScript实现了一个接口.

validation ajax datacontract typescript

12
推荐指数
2
解决办法
7370
查看次数

在 TypeScript 中对非类型化数据强制执行类型

我想知道在使用 TypeScript 时是否有任何工具或技术用于对对象数据进行低级验证。一个示例是 HTTP 服务上的 POST 请求的 JSON 正文。通常,我会为预期数据创建一个接口,然后将数据转换到该接口,但我知道这很肤浅。

例子:

router.route('/supercres')
    .get((req, res, next) => {
        const typedBody = <SuperCresBody>req.body;
    })

interface SuperCresBody {
    name: string,
    yoyo: boolean,
}
Run Code Online (Sandbox Code Playgroud)

强制执行接口的问题在于 TypeScript 只是一个编译时概念,在运行时不会强制执行任何内容。知道这一点,我很好奇是否有人找到了一种不需要大量样板或工具的聪明方法,以便在运行时完成这些事情的类型检查,而不必将接口契约作为一组命令性检查作为验证步骤来重复。

与此相关的一点是,在最新一集的 Function Geekery中,Matthias Felleisen 在该集末尾附近解释了 Typed Racket 中的类似需求。

相关阅读:

runtime-error static-typing typescript

5
推荐指数
1
解决办法
1242
查看次数

如何使用 TypeScript 实现对象验证?

我有一个 Express API 服务器应用程序和一个 React 客户端应用程序,它们都在 TypeScript 中实现。我使用 TypeScript 接口定义了我的数据模型,并且我在系统的两端都使用了这些接口。但是,TypeScript 接口只是编译时功能,我还需要运行时类型检查,例如验证 HTTP POST 数据 (json) 是否符合定义的数据结构。

所以我的问题是,我可以/应该如何利用 TypeScript 提供的功能来实现运行时对象验证?

javascript typescript ecmascript-6

5
推荐指数
1
解决办法
9179
查看次数

如何输入窄 JSX.Element

我想要一个可以是 React 组件或字符串的变量,如下所示:

function MyComponent(): JSX.Element {
  let icon: JSX.Element | string = "/example.png";  // (simplified)

  return <div>{typeof icon === "JSX.Element" ? icon : <img src={icon} />}</div>;
}
Run Code Online (Sandbox Code Playgroud)

然而 TS 抱怨我的状况说:

TS2367:此条件将始终返回“假”,因为类型“字符串” | “数字”| “bigint”| “布尔值”| “符号”| “未定义” | “对象”| “function”和“JSX.Element”没有重叠。

我应该怎么办?

typescript reactjs react-typescript

3
推荐指数
1
解决办法
935
查看次数