我正在努力解决以下打字稿编译问题:
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 };
有没有人解释为什么会这样?
答案 0 :(得分:1)
这是因为Names.francesco
被输入为string
而string
无法分配给'francesco'
类型。原因是string
不能保证是“francesco”。
您可能希望将界面更改为键入name
字符串:
export interface A {
name: string;
age?: number;
}
或者将Names.francesco
更改为'francesco'
:
const Names = {
francesco: 'francesco' as 'francesco'
};