字符串文字和可选参数在界面中不相处

时间:2016-12-07 18:30:28

标签: typescript

我正在努力解决以下打字稿编译问题:

const Names = {
    francesco: 'francesco'
}

export interface A {
    name: 'francesco';
    age?: number;
}

const e: A = { name: Names.francesco, age: 26 };

typescript编译器输出以下内容:

Type '{ name: string; age: number; }' cannot be converted to type 'A'.
  Types of property 'name' are incompatible.
    Type 'string' is not comparable to type '"francesco"'.
(property) francesco: string

但是,我找到了两种方法让编译器停止抱怨字符串文字:

方法1

制作可选参数" age"接口A必须。

方法2

替换此行

const e: A = { name: Names.francesco, age: 26 };

const e: A = { name: 'francesco', age: 26 };

有没有人解释为什么会这样?

1 个答案:

答案 0 :(得分:1)

这是因为Names.francesco被输入为stringstring无法分配给'francesco'类型。原因是string不能保证是“francesco”。

您可能希望将界面更改为键入name字符串:

export interface A {
    name: string;
    age?: number;
}

或者将Names.francesco更改为'francesco'

const Names = {
    francesco: 'francesco' as 'francesco'
};