【发布时间】:2018-09-24 08:54:40
【问题描述】:
我有一个函数可以处理没有数据到达的情况,否则它会调用回调来处理实际数据。
我使用 Typescript 2.8.3。
这个方法我试过了,还是不行:
interface Result { data: string | null; }
function doStuff(
input: Result,
cb: (str: Exclude<Result, {data: null}>) => void
): void {
if (input.data) {
cb({data: input.data});
}
}
doStuff({data: "x"}, (result) => {
alert(result.data.length); // TS2532: Object is possibly 'null'
});
我必须保留Result 接口,因为它是某个 GQL 库生成的代码。此解决方案有效,但对我来说不可能:
interface VoidResult { data: null; }
interface NonVoidResult { data: string; }
type Result = VoidResult | NonVoidResult;
function doStuff(
data: Result,
cb: (str: NonVoidResult) => void
): void { ... }
实际结果对象不是字符串,而是一种复杂的对象类型,将来甚至可能会发生变化。因此,像cb: (str: string) => void 这样写回调也没有用。
有没有办法从对象成员为空的类型中删除?
【问题讨论】: