gpt4 book ai didi

typescript - 改变条件变量的类型

转载 作者:搜寻专家 更新时间:2023-10-30 21:29:33 29 4
gpt4 key购买 nike

我真的很喜欢这种方式,typescript 在条件中处理变量类型:

class Foo {
public bar(){...}
}
type Fun = ()=>void;
const X:Foo|Fun|PromiseLike<Foo|Fun> = whaeverReturnsFooOrFun();
...
//1: great!
if (X instanceof Foo) X.bar();
...
//2: great!
if (typeof(X) === 'function') X();

然而,duck typing 并不是那么好...

//3: duck typing: not so great...
if ((<PromiseLike<Foo|Fun>>X).then) return X.then((X)=>{...});

相反你必须写:

if ((<PromiseLike<Foo|Fun>>X).then) return (<PromiseLike<Foo|Fun>>X).then((X)=>{...});

如果您在 block 中多次使用 X,这会很烦人。我经常使用 duck typing 来找出对象属于哪种(接口(interface))类型。

有没有办法定义变量在 block 范围内具有更窄的类型?

例如:

if ((<PromiseLike<Foo|Fun>>X).then) {
narrow X:PromiseLike<Foo|Fun>;
return X.then((X)=>{...});
}

当然可以声明一个新变量,但我不喜欢这样,因为它是作用域中的一个新名称,而不是原来的名称:

if ((<PromiseLike<Foo|Fun>>X).then) {
const X2 = <PromiseLike<Foo|Fun>>X;
return X2.then((X)=>{...});
}

最佳答案

关于typescript - 改变条件变量的类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44045548/

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