小编jos*_*ler的帖子

Typescript-设置类成员的默认值

我有一个简单的模型:

export class Profile extends ServerData {
  name: string;
  email: string;
  age: number;
}
Run Code Online (Sandbox Code Playgroud)

当我打电话到服务器(Angular 4,$ http)时,我通常会收到以下响应:

{
  name: string;
  email: string;
}
Run Code Online (Sandbox Code Playgroud)

age属性丢失。

有什么方法可以使用我的模型并创建默认年龄,以防丢失?如果可能,我希望不必创建2个单独的模型。

我不想将年龄创建为可选属性-我需要它,即使它的默认值不正确也是如此。

更新:

这是我对服务器的呼叫:

results-manager.component.ts:

this.resultsManagerService.getResults(this.config.request.action, this.pagingAndSorting, this.args).subscribe(
  results => {
    this.results = this.results.concat(results as Profile[]);
Run Code Online (Sandbox Code Playgroud)

results-manager.service.ts:

getResults(action: string, pagingAndSorting: PagingAndSorting, args: string[]): Observable<Profile[]> {
return this.apiService.callServer(
  pagingAndSorting,
  action,
  ...args );
Run Code Online (Sandbox Code Playgroud)

}

该请求有效并且我收到了响应,但是即使我定义了默认值(如@msanford的答案所建议),当我在组件中收到响应时,它们也会被删除。同样,如果我向模型添加构造函数(根据董建华的回答)。

后端响应似乎完全覆盖了模型-不仅仅是分配值。

我如何才能仅将值分配给模型而不删除不返回的值?

typescript angular

6
推荐指数
2
解决办法
2万
查看次数

Javascript中的高效字符串操作

我有一个字符串(HTML内容)和一个位置(索引)对象数组.字符串长度约为160万个字符,大约有700个位置对象.

即:

var content = "<html><body><div class="c1">this is some text</div>...."
var positions = [{start: 20, end: 25}, {start: 35, end: 37}....]
Run Code Online (Sandbox Code Playgroud)

我必须在字符串中的每个起始位置插入一个开口span标记,并在字符串中的每个结束位置插入一个close span标记.

最有效的方法是什么?

到目前为止,我已经尝试反向排序位置数组,然后循环,然后使用replace/splice插入标记,例如:

content = content.slice(0, endPosition) + "</span>" + content.substring(endPosition);
content = content.slice(0, startPosition) + "<span>" + content.slice(startPosition);
Run Code Online (Sandbox Code Playgroud)

(注意我是如何从最后开始循环的,以避免弄乱开始/结束位置).

但这需要大约3秒钟,这对我来说似乎缓慢且效率低下.

有什么更有效的方法呢?

javascript string loops

6
推荐指数
1
解决办法
408
查看次数

TypeScript 编译错误,使用大括号导入非默认接口

编译我的 TypeScript 项目时,编译器抛出以下错误:

node_modules/@types/domutils/index.d.ts:6:10 - error TS2614: Module '"../../domhandler/lib"' has no exported member 'DomElement'. Did you mean to use 'import DomElement from "../../domhandler/lib"' instead?
Run Code Online (Sandbox Code Playgroud)

违规行是:

import { DomElement } from "domhandler";
Run Code Online (Sandbox Code Playgroud)

问题是,在它试图从中导入的类型文件中,DomElement 接口是一个非默认导出接口,如下所示:

export interface DomElement {
    attribs?: {[s: string]: string};
    children?: DomElement[];
    data?: any;
    name?: string;
    next?: DomElement;
    parent?: DomElement;
    prev?: DomElement;
    type?: string;
}
Run Code Online (Sandbox Code Playgroud)

如果我删除花括号,它实际上确实有效,但这对我来说似乎有问题:

  1. 我的印象是只有默认导出才能在没有花括号的情况下导入。为什么在没有花括号的情况下需要此导入?
  2. 此问题发生在node-modules绝对类型提供的文件夹中的类型定义中。我不想更改依赖文件。Github 中没有相关的公开问题,所以我认为它确实有效。事实上,它适用于使用旧版本 Node (v8) 的同事,但这似乎没有什么不同。

版本:

  • Node.js - 12.14.0
  • 项目清单
  • TypeScript 3.7.2(也测试过不适用于 3.7.4)
  • domhandler 2.4 的类型定义( …

node.js typescript typescript-typings

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