繁体   English   中英

类型“void”不可分配给对象

Type 'void' is not assignable to object

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

export class LoginInfo {
    userName: string;
    password: string;
} 

public getLoginInfo(id: number): Promise<LoginInfo> {
    return this.http.get(this.url + id + '/' + '/loginInfo')
        .toPromise()
        .then(response => response.json() as LoginInfo)
        .catch((error: Response) => {
            this.handleError(error);
        });
}

得到了用于从 API 控制器检索数据的代码。 在 ts 中编译它时,我总是收到此错误:

Type 'Promise<void | LoginInfo>' is not assignable to type 'Promise<LoginInfo>'
Type 'void' is not assignable to type 'LoginInfo'

这是我的软件包版本:

"typescript": "2.5.2",
"@angular/compiler": "4.3.6"
"@angular/compiler-cli": "4.3.6"
1 个回复

您需要在错误处理案例中返回一些内容或抛出一个新错误。 该方法承诺返回LoginInfo但如果发生错误,您将不返回任何内容,打字稿可防止您意外返回任何内容,如果这是您想要的,则应明确返回 null:

public getLoginInfo(id: number): Promise<LoginInfo> {
    return this.http.get(this.url + id + '/' + '/loginInfo')
        .toPromise()
        .then(response => response.json() as LoginInfo)
        .catch((error: Response) => {
            this.handleError(error);
            // return null;
            throw new Error();
        });
}

作为旁注,async/await 版本可能更具可读性:

public async getLoginInfo(id: number): Promise<LoginInfo> {
    try{
        let response = await this.http.get(this.url + id + '/' + '/loginInfo').toPromise();
        return response.json() as LoginInfo;
    } catch (error) {
        this.handleError(error);
        return null;
    }
}
1 类型'()=> {}不能指定类型'()=> void'

我理解错误消息: 类型'()=&gt; {}不能指定类型'()=&gt; void' 好吧,它告诉我有一个类型转换问题。 但是我无法弄清楚为什么编译器认为类型不一样。 代码的背景是我有一个给出函数的typescript类,然后将它存储为成员。 我希望能够使用空的'no ...

2 void 不可分配给 > '() => void' 类型的参数

我有一个 angular 应用程序,它最初是在 Angular 2 中编写的,然后升级到 7,然后升级到 9,现在尝试从 11 开始。 我的代码有一个 function ,它在最初加载应用程序时通过套接字从后端获取用户的通知计数(下面的代码),这工作正常,但在 Angular 11 中不再这样做。我 ...

3 类型 void 不可分配给数组

我正在尝试创建一种方法,该方法从数组的每个元素的字符串(包含数字的字符串)中删除所有零; 我收到此错误“类型 void 不可分配给程序 [] ...

2020-07-15 12:19:13 4 224   angular
7 类型 'void[]' 不能分配给类型 'Foo[]'

我正在使用ramda map和forEach方法,但是当我将 hover 转到result变量时。 它给出了以下错误: 类型 'void[]' 不能分配给类型 'Foo[]'。 数据类型Foo和代码是正确的,我确信这一点。 我知道我缺少return声明。 我不确定在哪里添加。 谁能帮我解决这个问题 ...

8 类型 'void' 不可分配给类型 'ObservableInput<{}>'

这个错误在我迁移到 TS 2.2.2 后开始出现,所以我假设这就是问题所在......代码没有停止工作,但现在我收到了这个错误,我尝试了一些事情,比如返回一个空的 observable ,捕获重新抛出的异常并返回 object,似乎没有任何效果。 为什么现在会发生这种情况? 难道它不应该理解我正在 ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2022 STACKOOM.COM