تابع تایپاسکریپت از کلاس دیگر


من تازه با تایپاسکریپت آشنا شدهام، اما حالا یک مشکل دارم. من یک تابع در تایپاسکریپت بیرون از هر کلاس نوشتهام

function someFunction(){
}

و حالا میخواستم تابع را از فایل TS دیگری فراخوانی کنم و آن را به صورت زیر اعلام کردم:

declare function someFunction(): void;

اما این در کنسول مرورگر کار نخواهد کرد، خطا میگیرم

خطای ارجاع نشده: someFunction() تعریف نشده است

پرونده یک به این صورت است:

export class SomeClass{
}

export function someFunction(){
}

پرونده دو :

///<reference path="File1.ts" />
export class SomeOtherClass{
 someFunction();
}

پاسخ شماره ۱

شما نیازی به اعلام تابع ندارید، میتوانید به فایلی که آن را دارد ارجاع دهید و سپس کامپایلر آن را خواهد دانست.
به عنوان مثال:

// file1.ts

function someFunction(): string {
    ...
}

استفاده کن:

// file2.ts

/// <reference path="file1.ts" />

let mystr = someFunction();

خطایی که دریافت میکنید یک خطای زمان اجرا است زیرا file1.js را شامل نمیکنید:

<script src="file1.js" />

ویرایش

کدی که به سوال خود اضافه کردید با دو تغییر برای من کامپایل میشود:

(1) صادرات حذفشده:

// file1.ts

class SomeClass {}

function someFunction() {}

(2) یک متد کلاسی اضافه کرد:

// file2.ts

/// <reference path="file1.ts" />

class SomeOtherClass {
    fn() {
        someFunction();
    }
}

ویرایش توسط نویسنده اصلی: دومین راهحل (برای من جواب داد)

// file1.ts

export function someFunction(){
    ...
}

استفاده کن:

// file2.ts

import myFunc = require('./file1');

myFunc.someFunction();

پاسخ شماره ۲

من دقیقاً متوجه نمیشوم که شما چه کاری میخواهید انجام دهید، اما در تایپاسکریپت تعریف یک تابع به این صورت انجام میشود:

public someFunction(): void {}

شما میتوانید public را با private یا protected طبق نیاز خود جایگزین کنید، یا حتی آن را حذف کنید

تماس از مرورگر باید توسط چارچوبی که استفاده میکنید با استفاده از رویدادها (click) و غیره انجام شود