declare namespace CS.UnityEngine { interface GameObject { GetComp(type: { new(): T }): T AddComp(type: { new(): T }): T } interface Component { GetComp(type: { new(): T }): T AddComp(type: { new(): T }): T } } type CSArray = CS.System.Array declare namespace CS.System { interface Array { get(index: number): T set(index: number, value: T): void toJsArray(): T[] at(index: number): T forEach(callbackfn: (value: T, index: number, array: CSArray) => void): void map(type: { new(...args: any[]): U }, callbackfn: (value: T, index: number, array: CSArray) => U): CSArray filter(callbackfn: (value: T, index: number, array: CSArray) => boolean): CSArray reduce(callbackfn: (previousValue: T, currentValue: T, currentIndex: number, array: CSArray) => T): T reduceRight(callbackfn: (previousValue: T, currentValue: T, currentIndex: number, array: CSArray) => T): T find(predicate: (value: T, index: number, array: CSArray) => boolean): T findIndex(predicate: (value: T, index: number, array: CSArray) => boolean): number indexOf(searchElement: T, fromIndex?: number): number lastIndexOf(searchElement: T, fromIndex?: number): number some(callbackfn: (value: T, index: number, array: CSArray) => boolean): boolean every(callbackfn: (value: T, index: number, array: CSArray) => boolean): boolean slice(start?: number, end?: number): CSArray concat(...items: CSArray[]): T[] join(separator?: string): string sort(compareFn?: (a: T, b: T) => number): CSArray reverse(): CSArray includes(searchElement: T, fromIndex?: number): boolean fill(value: T, start?: number, end?: number): CSArray copyWithin(target: number, start: number, end?: number): CSArray } }