【问题标题】:working function even if it is returning the wrong type工作功能,即使它返回错误的类型
【发布时间】:2016-07-31 18:00:12
【问题描述】:

我正在使用 Codepen.io 对 Typescript 进行第一次测试,但我不明白为什么在使用接口声明函数签名和返回类型之后,我可以返回不同的类型而不会出现任何错误。

我错过了什么吗?

示例代码:

interface IPerson {
    getFullName: () => void;
}

class Person implements IPerson{

constructor(
    public name: string,
    public surname: string
){}

getFullName() {
    return this.name + ' ' + this.surname;
}

}


let p = new Person('John','Doe');

console.log(p.getFullName());

结果:

John Doe 

问题: 即使我声明了 void 返回类型,为什么还要注销 'John Doe' (a string)?

【问题讨论】:

    标签: typescript


    【解决方案1】:

    TypeScript 会抛出编译错误,如下所示:

    类型 'string' 不能分配给类型 'void'。

    但是 Typescript 仍会编译为 Javascript。 JS 本身没有任何类型的概念,因此只会记录值,因为运行时不知道 getFullName() 有什么返回类型。

    如果出现编译器错误时不编译,可以在tsconfig.json 中设置noEmitOnError 标志。

    【讨论】:

    • 所以你认为它只是一种codepen的错误,因为它只是编译成JS吗?如果我尝试使用 Typescript 编译器运行代码,我会得到一个错误,对吗?
    • 是的,你会得到一个错误,但 ts 仍然会发出 JS 文件。
    • 你可以在typescriptlang.org/play上试试同样的代码,肯定会报错。
    • 感谢您的帮助。我尝试使用 typescript play 运行代码,就像你说的那样,即使它提醒我有错误,它也会编译。然后我尝试使用添加一个接口,即使它仍然返回错误的类型,我仍然能够让它工作而没有任何错误。你知道为什么吗?接口是否只检查函数是否存在而不检查类型?我正在编辑我的原始帖子,让您看到新代码。
    • 它通常会检查类型,但void 似乎是这里的例外。
    猜你喜欢
    • 2023-03-08
    • 2021-10-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-19
    • 1970-01-01
    相关资源
    最近更新 更多