相关疑难解决方法(0)

在JavaScript中查找数组的最小/最大元素

如何轻松获取JavaScript数组的最小或最大元素?

示例Psuedocode:

let array = [100, 0, 50]

array.min() //=> 0
array.max() //=> 100
Run Code Online (Sandbox Code Playgroud)

javascript

710
推荐指数
34
解决办法
72万
查看次数

任何[]类型都不存在打字稿flatMap,flat,flatten

我正在使用chrome 70和chrome确实添加了方法.flatMap, .flatten, .flat.所以我的代码确实按预期运行.不幸的是,Typescript不喜欢它.

// data.flatMap lint error
export const transformData = (data: any[]) => data.flatMap(abc => [
   parentObj(abc),
   ...generateTasks(abc)
]);
Run Code Online (Sandbox Code Playgroud)

我得到的警告是 TS2339: Property 'flatMap' does not exist on type 'any[]'.

通过我使用的方式Angular 6,它使用Typescript ~2.9.2我已经包括import 'core-js/es7/array';polyfills.ts.

我的猜测是这些方法没有打字,我确实试过npm run -dev @types/array.prototype.flatmap但仍未解决.

typescript angular

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

从 ES6 映射中删除 undefined 而不会出现 Typescript 错误

当一个对象有一个可能未定义的 id 且您想要从这些对象的数组中选择所有现有 id 时,为什么以下代码会产生 Typescript 错误,指出 y.id 可能未定义?

.filter(x => x.id !== undefined).map(y => y.id)
Run Code Online (Sandbox Code Playgroud)

javascript typescript ecmascript-6

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

用于删除未定义项的过滤器未被 TypeScript 选取

在下面的代码中,我想不必undefined为filteredDevice添加类型注释。我认为一个被过滤的设备不应该是未定义的,因为我过滤掉了未定义的设备。

但是如果我删除undefined类型注释,TypeScript 会抱怨Type 'ICouchDBDocument | undefined' is not assignable to type 'ICouchDBDocument'.

devices
.filter((device: ICouchDBDocument | undefined) => Boolean(device)) //should filter away all undefined devices?
.map((filteredDevice: ICouchDBDocument | undefined) => { ... })
Run Code Online (Sandbox Code Playgroud)

如何更改我的代码,以便过滤器对类型注释产生影响?

typescript

4
推荐指数
1
解决办法
2071
查看次数

Typescript 无法理解对象数组中未定义值的过滤器

我努力让打字稿理解我已经project在这个(缩短的)示例中处理一个属性()的未定义情况:

interface Entry {
    id: number
    project?: Project
    isPublished?: boolean
}

entries
     .filter(entry => !!entry.project)
     .map(entry => ({
           title: entry.project.title
     }))
Run Code Online (Sandbox Code Playgroud)

(这里entries是 s 的数组Entry),编译器在属性上抱怨entry.project.titleproject即使TS2532: Object is possibly 'undefined'我有过滤器删除未定义的。其他可选属性在过滤后仍然是可选的,因此我无法使用Required接口:/

如何让 TS 明白该属性是在 map 函数中明确定义的?

谢谢

-- 编辑:添加了另一个可选属性/说明作为对建议答案的响应,这将使所有属性成为必需

typescript

4
推荐指数
1
解决办法
4577
查看次数

打字稿和过滤器布尔

请考虑下面的代码strictNullChecks打开:

var a: (number | null)[] = [0, 1, 2, 3, null, 4, 5, 6];
var b: { value: number; }[] = a.map(x => x != null && { value: x }).filter(Boolean);
Run Code Online (Sandbox Code Playgroud)

由于以下原因,它无法编译:

Type '(false | { value: number; })[]' is not assignable to type '{ value: number; }[]'.
  Type 'false | { value: number; }' is not assignable to type '{ value: number; }'.
    Type 'false' is not assignable to type '{ value: number; }'. …
Run Code Online (Sandbox Code Playgroud)

typescript strictnullchecks

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

令人信服的TypeScript编译器,过滤后的数组不包含任何null

我遇到了一个有趣的案例,其中TypeScript编译器(带有strictNullChecks === true)不允许我将过滤掉null的数组传递给需要数字数组的函数。

这是显示问题的代码示例:

class Test {
    constructor() {
        const values = [1, 2, null, 4].filter(x => x);
        this.printNumberArray(values);
    }

    printNumberArray(values: number[]) {
        console.log(values);
    }
}
Run Code Online (Sandbox Code Playgroud)

这将导致出现一个红色的花体,并显示以下values错误:

Argument of type '(number | null)[]' is not assignable to parameter of type 'number[]'.
  Type 'number | null' is not assignable to type 'number'.
    Type 'null' is not assignable to type 'number'.

const values: (number | null)[]
Run Code Online (Sandbox Code Playgroud)

filter保证消除空值,但显然编译器无法识别。

我可以通过将数组中的所有值强制转换为数字来解决此问题,如下所示:

const values = [1, 2, null, …
Run Code Online (Sandbox Code Playgroud)

typescript

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