获取 JSON 数组分配有问题的客户端

Fetch client having an issue with JSON array assignment

Aurelia fetch 客户端文档有一个获取 json 数据的基本示例:

bind() {
    let client = new HttpClient();

    return client.fetch('data.json')
        .then(response => response.json())
        .then(data => {
            console.log(data[1]);
        });
}

以上工作正常但以下工作不正常:

files = [];

bind() {
    let client = new HttpClient();

    return client.fetch('data.json')
        .then(response => response.json())
        .then(files => this.files = files);
}

Gulp 现在抱怨 "error TS2322: Type 'Response' is not assignable to type 'any[]'."

更奇怪的是,我现在在我的控制台中收到 XHR 404 错误。这是没有意义的; data.json 文件在第一次找到和获取时没有问题。第二个代码片段的唯一区别是,我没有将数据记录到控制台,而是试图用它做一些事情。

我认为您的具体问题可能是由旧版本的 TypeScript(2.1,最新的是 2.5)引起的。如果你有机会这样做,你可以尝试更新它。

语句 response => 中的

response 是 Aurelia 定义的 Response 类型。当你是 运行 this.files = files 时,TypeScript 似乎认为 filesResponse 类型。您已经将 this.files 隐式声明为类型 any[],因此不允许赋值。

您可以通过为 files 设置显式类型来解决这个问题,甚至只使用 any:

.then((files: any[]) => this.files = files);

我会尽量避免使用 any 来绕过类型安全并使用类型,但您 运行 遇到的问题似乎是 TypeScript and/or 您正在使用的 Aurelia。