टाइपस्क्रिप्ट में एक इंटरफ़ेस और एक वर्ग को मर्ज करना संभव है यदि उनका एक ही नाम है और एक ही फाइल में हैं:

interface Test {
  example(input: 'a number'): number;
  example(input: 'a string'): string;
}

class Test {
  example(input: string): any {
    //return something
  }
}

const obj = new Test();
obj.example('a number'); //return type is number
obj.example('a string'); //return type is string
obj.example('something else'); //return type is any

हालाँकि, इन इंटरफ़ेस परिभाषाओं को कई फ़ाइलों में विभाजित करने का कोई तरीका प्रतीत नहीं होता है, उदा .:

//test.interface.ts
export interface Test {
  example(input: 'a number'): number;
  example(input: 'a string'): string;
}

//test.class.ts
import "./test.interface.ts";

class Test {
  example(input: string): any {
    //return something
  }
}

const obj = new Test();
obj.example('a number'); //return type is any but should be number
obj.example('a string'); //return type is any but should be string
obj.example('something else'); //return type is any

कक्षा और वास्तविक इंटरफ़ेस के बीच ऐसी इंटरफ़ेस परिभाषा को एकाधिक फ़ाइलों में विभाजित करने का सही तरीका क्या है?

2
Marcus Krahl 24 अक्टूबर 2018, 14:39

1 उत्तर

सबसे बढ़िया उत्तर

इस समस्या का समाधान इसकी परिभाषा को बढ़ाने के लिए "होस्टिंग" टाइपस्क्रिप्ट मॉड्यूल को फिर से घोषित करना है:

//test.interface.ts
declare module './test.class.ts' {
  interface Test {
    example(input: 'a number'): number;
    example(input: 'a string'): string;
  }
}

//test.class.ts
import "./test.interface.ts";

class Test {
  example(input: string): any {
    //return something
  }
}

const obj = new Test();
obj.example('a number'); //return type is number
obj.example('a string'); //return type is string
obj.example('something else'); //return type is any
4
Marcus Krahl 24 अक्टूबर 2018, 11:51