小编Eri*_*ndi的帖子

如何测试使用 Angular 6+ 调用 observable 的拦截器?

我已经构建了一个HttpInterceptor紧跟 Angular 文档中的那个。

但是,作为拦截器的一部分,我需要进行异步调用。我用代码的简化版本(但语义相同)创建了一个StackBlitz。

拦截器看起来像:

export class AuthInterceptor implements HttpInterceptor {
    constructor(private session: SessionService, private config: ConfigurationService) {}

    intercept(req: HttpRequest<any>, next: HttpHandler) {
        const apiRoot = this.config.apiUrl;
        if (apiRoot && req.url.startsWith(apiRoot)) {
            return this.addAuth(req).pipe(switchMap(x => next.handle(x)));
        } else {
            return next.handle(req);
        }
    }

    private addAuth(original: HttpRequest<any>): Observable<HttpRequest<any>> {
        return from(this.session.getToken()).pipe(
            map(token => {
                const req = original.clone({
                    setHeaders: { Authorization: `Bearer ${token}` }
                });
                return req;
            })
        );
    }
}
Run Code Online (Sandbox Code Playgroud)

这很简单:

  • 检查我们正在调用的 URL 是否需要我们的令牌 ( req.url.startsWith() …

unit-testing angular-http-interceptors angular angular-unit-test

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

TypeScript 可以将 keyof 限制为特定类型的属性列表吗?

所以,我想写一个通用方法。为了解决这个问题,假设我想连接来自同一类型的 2 个不同对象的 2 个字符串属性。

function concat<T>(target1: T, target2: T, key: keyof T): string {
  return target1[key] + target2[key];
}
Run Code Online (Sandbox Code Playgroud)

上面的代码无法编译,因为编译器没有指示我key只想限制为 type 的属性列表string。

TypeScript 目前不支持此功能吗?

我知道我可以进行运行时检查,但我想要对此进行编译时检查。

generics typescript

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

如何在我的应用程序中找出导致I/O的原因?

下午好,

我从几年前继承了一些C#代码.我已经重构了一点异步.评估我的更改对CPU性能的影响,我使用Process Explorer大致观察我的应用程序在做什么.令我惊讶的是,它似乎正在进行Process Explorer报告的I/O. 通常,这与磁盘I/O或网络I/O有关.根据我所看到的代码,我无法找出对这两个I/O源中的任何一个的显式调用.

我的问题是:确定哪一部分代码导致I/O的最佳方法是什么?我们使用JetBrains中的dotTrace来分析我们的应用程序,但是,据我所知,它只处理CPU和内存性能.

提前感谢任何指针.

问候,

埃里克.

c# windows profiling process-explorer

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

VB6 - 使用特定文化将字符串转换为double?

我是一个很长时间的C#开发人员,最近不得不查看一些VB6代码.经过一番挖掘,我们发现,在某个地方,某种程度上,我们将数字存储为字符串.现在我们正在阅读它,我们的代码并没有很好地处理文化差异.这是一个例子:

Dim text as String
Dim myVal as Double
Set text = "1,123456"
'This sets the value of myVal to 1123456 on our system - incorrect
myVal = text

Set text = "1.123456"
'This sets the value of myVal to 1.123456 on our system - correct
myVal = text
Run Code Online (Sandbox Code Playgroud)

请记住,这是VB6而不是VB.NET,是否有任何内置的方法,函数,无论什么,可以使用特定的文化将字符串转换为double?或者至少,暗示我们可能正在处理不同格式的转换?

我们仍在挖掘如何编写价值,看看我们是否可以对流程进行逆向工程,以便为我们提供一致的结果.但是,我们的客户已经拥有(拥有)一种格式或另一种格式(或两者,我们正在检查......)的数据,因此此时正确的转换算法或实现将是更好的答案.

vb6 localization type-conversion

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

连接对象的字符串表示的好方法?

好,

我们的代码中有很多where子句.我们只是尽可能多的方式来产生一个字符串来表示的条件.我试图想出一个干净的方式如下:

public static string Join<T>(this IEnumerable<T> items, string separator)
{
    var strings = from item in items select item.ToString();
    return string.Join(separator, strings.ToArray());
}
Run Code Online (Sandbox Code Playgroud)

它可以使用如下:

var values = new []{1, 2, 3, 4, 5, 6};
values.StringJoin(",");
// result should be:
// "1,2,3,4,5,6"
Run Code Online (Sandbox Code Playgroud)

所以这是一个很好的扩展方法,可以完成一项非常基础的工作.我知道简单的代码并不总是变成快速或有效的执行,但我只是好奇我能用这个简单的代码错过了什么.我们团队的其他成员争辩说:

  • 它不够灵活(无法控制字符串表示)
  • 可能没有内存效率
  • 可能不会很快

任何专家都会加入?

问候,

埃里克.

c# optimization extension-methods memory-management

2
推荐指数
1
解决办法
233
查看次数

在TypeScript中创建类似静态的类或模块层次结构?

我正在尝试为我们网站的javascript创建一个"全局"配置结构.我想要做的是这样的事情:

company.config.serviceUrl = "http://yoursite.com/servic";
company.config.serviceKey = "123456789ABCDEF";
Run Code Online (Sandbox Code Playgroud)

在C#中(是的,我是一个C#人),这将是一个静态类config,在company命名空间内有几个静态属性serviceUrl和serviceKey.

知道如何在TypeScript中执行此操作吗?我设法"做到了",但是看着生成的javascript,我不确定这个Config类是公开的是我想要的.

这是源TypeScript:

module company{
    export class Config {
        serviceUrl = "";
        serviceKey = "";
    } 

    export var config = new Config();
}

company.config.serviceUrl = "http://yoursite.com/service";
company.config.serviceKey = "123456789ABCDEF";
Run Code Online (Sandbox Code Playgroud)

生成的javascript:

var company;
(function (company) {
    var Config = (function () {
        function Config() {
            this.serviceUrl = "";
            this.serviceKey = "";
        }
        return Config;
    })();
    company.Config = Config;    
    company.config = new Config(); …
Run Code Online (Sandbox Code Playgroud)

typescript

2
推荐指数
1
解决办法
4241
查看次数

nodejs进程内存不足时如何理解日志

我的节点服务器崩溃并显示以下日志。

<--- Last few GCs --->

  504158 ms: Mark-sweep 1379.9 (1434.3) -> 1379.0 (1434.3) MB, 1486.7 / 0.0 ms [allocation failure] [GC in old space requested].
  505610 ms: Mark-sweep 1379.0 (1434.3) -> 1379.0 (1434.3) MB, 1452.0 / 0.0 ms [allocation failure] [GC in old space requested].
  507067 ms: Mark-sweep 1379.0 (1434.3) -> 1379.0 (1406.3) MB, 1456.1 / 0.0 ms [last resort gc].
  508505 ms: Mark-sweep 1379.0 (1406.3) -> 1379.0 (1406.3) MB, 1438.3 / 0.0 ms [last resort gc].
Run Code Online (Sandbox Code Playgroud)

我了解 Mark-sweep …

javascript garbage-collection memory-management v8 node.js

2
推荐指数
1
解决办法
1913
查看次数

为什么TypeScript在对象文字中分配时将字符串文字联合类型转换为字符串?

我喜欢TypeScript中的字符串文字联合类型.我遇到了一个简单的案例,我希望保留联合类型.

这是一个简单的版本:

let foo = false;
const bar = foo ? 'foo' : 'bar';

const foobar = {
    bar
}
Run Code Online (Sandbox Code Playgroud)

bar正确输入为'foo' | 'bar':

在此输入图像描述

但foobar.bar输入为string:

在此输入图像描述

只是好奇为什么.

更新

所以@jcalz和@ggradnig确实做得很好.但后来我意识到我的用例有一个额外的转折:

type Status = 'foo' | 'bar' | 'baz';
let foo = false;
const bar: Status = foo ? 'foo' : 'bar';

const foobar = {
    bar
}

Run Code Online (Sandbox Code Playgroud)

有趣的是,bar确实有一种类型Status.但是foobar.bar还有一种类型'foo' | 'bar'.

似乎让它表现得如我所期待的唯一方法是投射'foo'到Status:

const bar = …
Run Code Online (Sandbox Code Playgroud)

typescript union-types

2
推荐指数
1
解决办法
755
查看次数