我有这个代码。
interface Test {
field1: string;
field2: string;
}
interface Test2 {
field3: string;
}
type TestResult = Partial<Test> & Test2;
const a = ():TestResult => {
return {};
}
这正常工作,我的意思是,如果我在obj中没有field3,它不会让我编译,但是我无法得到TestResult上所有字段的推论,只有“ Partial&Test2”。 我的意思是,如何实现智能感知,而不是显示它显示的“ Partial&Test2”
field1: string;
field2: string;
field3: string;
这将是TestResult的实际结果
提前谢谢
答案 0 :(得分:1)
无法保证将在工具提示中扩展类型别名。但是,有一个技巧可以用于多个版本:
interface Test {
field1: string;
field2: string;
}
interface Test2 {
field3: string;
}
type Id<T> = {} & { [P in keyof T]: T[P] }
type TestResult = Id<Partial<Test> & Test2>;
const a = ():TestResult => {
return {};
}
Id
类型将强制打字稿扩展类型别名并为您提供所需的工具提示(尽管对于大型类型,这实际上会适得其反,并使工具提示难以阅读)
type TestResult = {
field1?: string | undefined;
field2?: string | undefined;
field3: string;
}
您还可以实现相反的操作,即通过使用接口来维护名称而不是扩展类型:
interface Test {
field1: string;
field2: string;
}
interface Test2 {
field3: string;
}
type Id<T> = {} & { [P in keyof T]: T[P] }
interface TestResult extends Id<Partial<Test> & Test2> {}
const a = ():TestResult => {
return {};
}
这对于希望使用稳定名称而不是让ts扩展其所需类型的大型别名是非常有用的。