gpt4 book ai didi

typescript - 如何在 typescript 中描述 any|undefined?

转载 作者:行者123 更新时间:2023-12-03 23:45:34 27 4
gpt4 key购买 nike

const localAuth = async (callback: () => any) => { 
// not sure the return type of callback, so cast a any type
const ok = Math.random()
if (ok > 0.5)
return callback()
else {
return null
}}

localAuth(() => null).then(val => {
console.log(val.mayNotExist) // doesn't complain, but val maybe null!
})
typescript 代码如上,因为回调的返回类型不确定,所以我给它分配了一个任何类型,但显然任何类型都吞下了'空路径',如何更改代码才能不遗漏空的可能性?

最佳答案

将 localAuth 函数的返回类型明确定义为回调类型和 null 的联合。

type anyFunction = () => any;

const localAuth = async (callback: anyFunction): Promise<null|anyFunction> => {
const ok = Math.random()
if (ok > 0.5)
return callback()
else {
return null;
}
};

localAuth(() => null).then(val => {

console.log(val.arguments) // complains because val may be null

if (val) {
console.log(val.arguments) // doesn't complain, because you've checked
}

});
这样,您将获得 Object is possibly 'null'来自您的 typescript 编译器的问题 val.mayNotExist例如,正如预期的那样。
Typescript playground link所以你可以看到它在行动
编辑 1:
要回答您的评论,您可以使用类型别名。
const localAuth = async <T>(callback: () => T): Promise<null | T> => {
const ok = Math.random()
if (ok > 0.5)
return callback()
else {
return null;
}
};

localAuth(() => null).then(val => {

// val is type null

});

localAuth(() => '').then(val => {

// val is type (string | null)

});
Live typescript playground example
More reading

关于typescript - 如何在 typescript 中描述 any|undefined?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63006699/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com