Typescript 类型推断、传播语法和多种类型 return
Typescript type inference, spread syntax and multiple type return
interface SkillProperty {
[name: string] : number
};
let skills: SkillProperty;
skills = {}; // ok
skills = { fire: 123 }; // ok
skills = {
...skills, // ok
...{}, // ok
...extraSkills() // {} | { ice: number } is not assignable to type 'SkillProperty'.
}
function extraSkills() {
if (whatever) {
return {};
}
return { ice: 321 };
}
如何更改我的 SkillProperty
接口以使其与空对象和我的实际 SkillProperty 类型兼容?
您的 SkillProperty
接口 实际上与 {} | {ice: number}
:
兼容
let noSkills = {}
let iceSkills = { ice: 321 };
let randomSkills: {} | {ice: number} = (Math.random() < 0.5) ? noSkills : iceSkills
let maybeSkills: SkillProperty = randomSkills; // no error
所以,对我来说,这看起来像是 TypeScript 中的一个错误。类似的 issue was fixed, but this case 似乎仍然存在。可能值得打开一个包含现有问题链接的新问题。
同时有变通办法,例如:
skills = {
...skills, // ok
...{}, // ok
...extraSkills() as SkillProperty // okay now
}
希望对您有所帮助;祝你好运!
interface SkillProperty {
[name: string] : number
};
let skills: SkillProperty;
skills = {}; // ok
skills = { fire: 123 }; // ok
skills = {
...skills, // ok
...{}, // ok
...extraSkills() // {} | { ice: number } is not assignable to type 'SkillProperty'.
}
function extraSkills() {
if (whatever) {
return {};
}
return { ice: 321 };
}
如何更改我的 SkillProperty
接口以使其与空对象和我的实际 SkillProperty 类型兼容?
您的 SkillProperty
接口 实际上与 {} | {ice: number}
:
let noSkills = {}
let iceSkills = { ice: 321 };
let randomSkills: {} | {ice: number} = (Math.random() < 0.5) ? noSkills : iceSkills
let maybeSkills: SkillProperty = randomSkills; // no error
所以,对我来说,这看起来像是 TypeScript 中的一个错误。类似的 issue was fixed, but this case 似乎仍然存在。可能值得打开一个包含现有问题链接的新问题。
同时有变通办法,例如:
skills = {
...skills, // ok
...{}, // ok
...extraSkills() as SkillProperty // okay now
}
希望对您有所帮助;祝你好运!