首页 > 解决方案 > 打字稿动态可见的类方法

问题描述

知道如何使动态可见的类方法吗?

class Foo {
   method1() {}
   method2() {}
}

有时我只需要显示method1,有时两者都需要。

一种可能的解决方案可能是这样的,唯一的问题是,该方法适用于作为“属性”可见的提示。这只是一个小细节,但无论如何我喜欢它是否真的是方法。

https://www.typescriptlang.org/play/?ssl=1&ssc=1&pln=10&pc=12#code/MYGwhgzhAEBiD29oG8BQ0PQgFzNglsNALZgDWApgDwDy0FAHthQHYAmM8ARgFYXDYAfAAp4AfgBc0GgEopCJADJpKdJnUAnCtgCuGltBYUA7nETCZ0SFZYBPANxqMAXyfQADhvjMBFNiW0AC3g2AEZhMCkcDXwWAHNLZGhXTGIgkIAmCxRXV1RgeBYcaAAzaABeM3gAOlJKYWQ07GCwqQByNucZVBLa9LCLIA

标签: typescripttypescript-generics

解决方案


第一:仅在编译时检查可见性,因此请记住,如果您想阻止对方法的访问,则无法在运行时抛出错误。如果这是您的用例,请尝试其他方法。

如果您想要编译时检查,那么您真正追求的是更好的类型。

所以你有你的课Foo

class Foo {
   method1() {}
   method2() {}
}

如果在您的部分代码中您不想method1被调用,这只是意味着您需要定义一个typeinterface没有该方法。

type FooMethod2Only {
   method2: () => void;
}

method1在某些情况下不可见实际上意味着您正在使用没有该方法的类型。

因此,如果您使用这样的功能:

function doSomething(foo: FooMethod2Only) {
  foo.method1();
}
doSomething(new Foo());

然后打字稿会抱怨,因为尽管 Foo 有一个method1,但参数类型没有它。

因此,与其在属性/方法可见性中考虑这一点,不如将其视为为不同目的使用不同的类型/接口。


推荐阅读