Skip to content

关于ts的let和const

用let声明

在 TypeScript 中,当你使用 let 声明一个变量时,TypeScript 会尝试推断该变量的类型。在这个例子中,_effect 是一个函数,所以 TypeScript 推断它的类型为 () => any。这个类型没有 options 属性,所以当你尝试给 _effect.options 赋值时,TypeScript 会报错,因为它不知道这个属性存在。


用const声明

当你使用 const 声明一个变量时,TypeScript 会将该变量视为一个常量,它的值是不可更改的。在这个例子中,_effect 是一个函数,但是因为它是用 const 声明的,TypeScript 会将其类型推断为一个具有 options 属性的函数。所以,当你给 _effect.options 赋值时,TypeScript 不会报错。


解决

可以显式地为 _effect 指定一个类型,这个类型包含了 options 属性。例如:

typescript
type EffectFunction = {
    (): any;
    options?: Options;
};

export function effect(fn: Function, options: Options) {
    // 闭包
    const _effect: EffectFunction = function () {
        findeffect = _effect;
        let res = fn();
        return res
    }
    // 给_effect增添一个属性,这样在才知道依赖是否有改变
    _effect.options = options
    _effect()
    return _effect
}

以上代码,无论使用 const 还是 let 声明 _effect,都可以正常地给 _effect.options 赋值,而不会出现类型错误。

Released under the MIT License.