This question already has an answer here:
Why can't I return a generic 'T' to satisfy a Partial<T>?
(1个答案)
去年关闭。
例如:
我收到以下错误:
Playground link
有没有一种方法可以解决此问题而无需强制转换?
这将打开一个选项,您在函数
TypeScript编译器不会强制您定义与扩展相同的类型,只要完全提供了U(在本例中为boolean标志
一些可能的解决方案是:
使用Type-Cast(以前使用过):
缺点:
尝试重新定义您的功能
要告诉编译器确切使用
考虑泛型是否相关
您的函数需要通用类型,但函数主体会分配具体类型,这会在此处造成麻烦。您可以考虑泛型是否在此处相关。一个通用的免费替代方案是:
(1个答案)
去年关闭。
例如:
interface U {
u: boolean;
}
const f = <T extends U>() => {
const t: Partial<T> = {u: true};
};
我收到以下错误:
Type '{ u: true; }' is not assignable to type 'Partial<T>'.ts(2322)
Playground link
有没有一种方法可以解决此问题而无需强制转换?
最佳答案
TypeScript提示的问题如下:Type '{ u: true; }' is not assignable to type 'Partial<T>'.ts(2322)
您的函数f
可以通过以下方式调用:
f<{ u: boolean, v: boolean }>(); // ok since U is "implemented" but not "v"
这将打开一个选项,您在函数
{ u: true }
中对对象的泛型和所提供的具体实现可能会有所不同。TypeScript编译器不会强制您定义与扩展相同的类型,只要完全提供了U(在本例中为boolean标志
u
),您仍然可以指定U的更具体的实现。一些可能的解决方案是:
使用Type-Cast(以前使用过):
interface U {
u: boolean;
}
const f = <T extends U>() => {
const t: Partial<T> = {u: true} as Partial<T>;
};
f<U>();
缺点:
{ u: true }
可以替换为:{ v: true }
,这可能会导致稍后代码中未定义的问题。尝试重新定义您的功能
要告诉编译器确切使用
U
类型,可以在可能的情况下尝试重新措辞该函数并将常量t
作为函数参数移动。interface U {
u: boolean;
}
const f = <T>(u: T) => {
const t: Partial<T> = u;
};
f<{ u: boolean }>({ u: true });
考虑泛型是否相关
您的函数需要通用类型,但函数主体会分配具体类型,这会在此处造成麻烦。您可以考虑泛型是否在此处相关。一个通用的免费替代方案是:
interface U {
u: boolean;
}
const f = () => {
const t: Partial<U> = {u: true};
};
f();
关于typescript - 当T扩展U时,为什么不能将U分配给Partial <T>?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/60149705/
10-13 02:00