Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
TypeScript中的Friend类 C++中有一个叫做朋友类的东西。据我所知,TypeScript/JavaScript中没有这样的东西。有没有办法在TypeScript/JavaScript中模拟friend类的这种行为_Javascript_Typescript_Friend Class - Fatal编程技术网

TypeScript中的Friend类 C++中有一个叫做朋友类的东西。据我所知,TypeScript/JavaScript中没有这样的东西。有没有办法在TypeScript/JavaScript中模拟friend类的这种行为

TypeScript中的Friend类 C++中有一个叫做朋友类的东西。据我所知,TypeScript/JavaScript中没有这样的东西。有没有办法在TypeScript/JavaScript中模拟friend类的这种行为,javascript,typescript,friend-class,Javascript,Typescript,Friend Class,为了更好地解释(如果需要的话)我为什么要做以及我想做什么,我做了一些有趣的小游戏(和学习的东西),并尝试去做。目前,我只使用公共方法,一切正常,但我想将这些方法的可访问性限制在另一个类。如果有帮助的话,我会使用TypeScript。好吧,当然是有人提议的。看 但是,在最后一天,TypeScript不是C++,也不是java。是的,TypeScript(和ES6)提供了类,这些类看起来有点像经典OOP语言中的类,但该语言并不是真正打算成为一种拥有所有OOP功能的成熟OOP语言,也不应该是这样 如果

为了更好地解释(如果需要的话)我为什么要做以及我想做什么,我做了一些有趣的小游戏(和学习的东西),并尝试去做。目前,我只使用公共方法,一切正常,但我想将这些方法的可访问性限制在另一个类。如果有帮助的话,我会使用TypeScript。

好吧,当然是有人提议的。看

<>但是,在最后一天,TypeScript不是C++,也不是java。是的,TypeScript(和ES6)提供了类,这些类看起来有点像经典OOP语言中的类,但该语言并不是真正打算成为一种拥有所有OOP功能的成熟OOP语言,也不应该是这样

如果你发现自己缺少朋友类,你应该考虑你对类层次结构进行过多的处理,将太多的设计逻辑放进类结构中,试图使JS/TS变成一个它从来没有打算的OOP语言。

类型化脚本只提供访问修饰符。它当前没有类似或的内容


为了获得类似的效果:如果将代码打包为库并为其发出
.d.ts
声明文件,则可以在不希望外部人员使用的属性上使用
/**@internal*/
JSDoc注释,同时指定
--stripInternal
。这将导致导出的声明忽略这些属性


做类似事情的另一种方法是创建一个类实现的公共
接口
,然后只将该类导出为公共接口。例如:

// public interfaces
export interface UnitStatic {
  new(grid: Grid, x: number, y: number): Unit;
}
export interface Unit {
  move(x: number, y: number): void;
}
export interface GridStatic {
  new(): Grid;
  NUM_CELLS: number;
  CELL_SIZE: number; 
}
export interface Grid {
  // public methods on Grid
}

// private implementations
class UnitImpl implements Unit {
  constructor(private grid: GridImpl, private x: number, private y: number) {

  }
  move(x: number, y: number) {
    // ...
  }
}

class GridImpl implements Grid {
  cells: Unit[][] = [];
  constructor() {
    // ...
  }
  static NUM_CELLS = 10;
  static CELL_SIZE = 20;
}

//public exports
export const Unit: UnitStatic = UnitImpl;
export const Grid: GridStatic = GridImpl;
这很乏味,但可以非常明确地说明代码的哪些部分是供外部人员使用的,哪些部分不是


或者,由于上述两种方法实际上都不能阻止人们在运行时访问JavaScript中的私有/内部信息,因此可以使用。不过,在TypeScript中执行此操作可能更烦人,因为它可能需要您创建上述公共接口,以便进行属性类型检查



所以你有一些选择。希望他们能帮忙。祝你好运

问题其实是关于javascript的,对吗?当TypeScript编译成JavaScript时,它只是JavaScript的一个“超集”:最后,当然是JavaScript。但在TypeScript传输到JavaScript之前,情况就不同了。即使这只是语法上的甜点,代码也更简洁。这就是为什么我提到了TypeScript,我希望有一种方法可以用不同的,也许更干净的方式在TypeScript中实现。那么,你们看到了吗?我没有。谢谢。很抱歉,但我认为完全有可能将那个游戏示例一对一翻译成打字脚本。我知道关于函数式编程和oop编程有着激烈的讨论,但Typescript最肯定的目的是允许在javascript中使用oop风格的编码。也就是说,friend类不存在。你只能通过公开需要被网格访问的方法来解决这个问题。我不同意TypeScript不是一种合适的OOP语言。是的,它编译成JavaScript,但是在C++中也被编译成C。这并不意味着它只是一种函数式语言。不过,提案链接为+1。