两种 TypeScript 代码有什么区别?

3

我刚开始学习TypeScript,遇到了这个问题。

我有两个代码片段,在第一个代码片段中有一个对象name,在另一个代码片段(与第一个代码片段相同)中,变量名更改为user。 现在的问题是第一个代码片段会出现错误,但第二个却可以正常工作。

第一个代码片段(产生错误)

interface Person {
    firstName : string;
    lastName  : string;
}

function greeter(person: Person) {
    return "Hello " + person.firstName + " " + person.lastName;
}

var name = {firstName: "Girdhari", lastName: "Agrawal"};
document.body.innerHTML = greeter(name);

第二段代码(正常工作)

interface Person {
    firstName : string;
    lastName  : string;
}

function greeter(person: Person) {
    return "Hello " + person.firstName + " " + person.lastName;
}

var user = {firstName: "Girdhari", lastName: "Agrawal"};


document.body.innerHTML = greeter(user);

请帮助我理解这个。 编辑
This is what I am getting while compiling first script
greeter.ts(10,5): error TS2403: Subsequent variable declarations must have the same type.  Variable 'name' must be of type 'string', but here has type '{ firstname: string; lastName: string; }'.
greeter.ts(13,35): error TS2345: Argument of type 'string' is not assignable to parameter of type 'Person'.

5
有何错误?同样检查一下非工作版本是否存在任何不可见字符。 - Spencer Wieczorek
修改了问题 - Bug Hunter
3
你可能在代码的其他地方定义了name作为一个字符串。 - Igor
1
也许我无法理解,所以我分享了我的代码两个截图
  1. 错误:https://snag.gy/G5m1Kx.jpg
  2. 正常工作:https://snag.gy/hiuU7L.jpg
- Bug Hunter
1个回答

7

这是因为name是在lib.d.ts全局变量定义)中定义的(Window.name):

declare var name: string;

您之所以会遇到这个错误是因为您的代码也在全局作用域中。这就是为什么使用不同的变量名称可以解决问题的原因。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接