рдореИрдВ рдирд┐рдореНрди рдкреНрд░рдХрд╛рд░ рд╕реЗ рдмрд╛рд╣рд░реА рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдПрдХ рд╕реЗрдЯ рдмрдирд╛рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ:
// ClassA.ts
export default class ClassA {
public method() { return true; }
}
// ModuleB.ts
import ClassA from './ClassA';
var moduleB = {
ClassA: ClassA
};
export default moduleB;
// ModuleA.ts
import moduleB from './ModuleB';
var moduleA = {
moduleB: moduleB
}
export default moduleA;
рд╡рд┐рдЪрд╛рд░ рдпрд╣ рд╣реИ рдХрд┐ рдЗрд╕реЗ рд╕рдВрдХрд▓рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдФрд░ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рд░реВрдк рдореЗрдВ рдЖрдкреВрд░реНрддрд┐ рдХреА рдЬрд╛рдПрдЧреАред рдпреЛрдЬрдирд╛ рдпрд╣ рд╣реИ рдХрд┐ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдЙрдкрднреЛрдХреНрддрд╛ рдХреНрд▓рд╛рд╕ рдП рдХреА рдПрдХ рдЖрд╡реГрддреНрддрд┐ рдХреЛ рддреБрд░рдВрдд рдмрджрд▓ рджреЗрдЧрд╛:
import moduleA from './ModuleA';
var anInstance = moduleA.moduleB.ClassA();
рдРрд╕рд╛ рд▓рдЧ рд░рд╣рд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЕрдкреЗрдХреНрд╖рд┐рдд JS рдХреЛ рд╕рдВрдХрд▓рд┐рдд рдХрд░ рд░рд╣рд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдПрдХ рддреНрд░реБрдЯрд┐ рд╕рдВрдХрд▓рдХ рддреНрд░реБрдЯрд┐ рдорд┐рд▓ рд░рд╣реА рд╣реИ рдЬрд┐рд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдореИрдВ рд╕рдВрдШрд░реНрд╖ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред
Using tsc v1.6.2
.../src/ModuleA.ts(3,5): error TS4023: Exported variable 'moduleA' has or is using name 'ClassA' from external module ".../src/ClassA" but cannot be named.
рдХреНрдпрд╛ рдпрд╣рд╛рдБ рдХреЛрдИ рдЗрд╕ рдореБрджреНрджреЗ рдкрд░ рдХреЛрдИ рдкреНрд░рдХрд╛рд╢ рдбрд╛рд▓ рд╕рдХрддрд╛ рд╣реИ? рдХреНрдпрд╛ рдореИрдВ рдЬреЛ рдХреБрдЫ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рд╡рд╣ рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ?
рдУрд╣ - рдЕрдЧрд░ рдпрд╣ рд╕рд╡рд╛рд▓ рдкреВрдЫрдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд рдЬрдЧрд╣ рдирд╣реАрдВ рд╣реИред рдХреГрдкрдпрд╛ рдореБрдЭреЗ рдмрддрд╛рдПрдВ рдФрд░ рдореБрдЭреЗ рдЗрд╕реЗ рдХрд┐рд╕реА рдЕрдиреНрдп рдорд╛рдзреНрдпрдо рдкрд░ рдкреЛрд╕реНрдЯ рдХрд░рдиреЗ рдореЗрдВ рдЦреБрд╢реА рд╣реЛрдЧреАред
рдПрдлрдбрдмреНрд▓реНрдпреВрдЖрдИрдбрдмреНрд▓реНрдпреВ рдЖрдкрдХреЛ рдЖрдорддреМрд░ рдкрд░ рд╕реНрдЯреИрдХ рдУрд╡рд░рдлреНрд▓реЛ рдкрд░ рддреЗрдЬреА рд╕реЗ рдЬрд╡рд╛рдм рдорд┐рд▓реЗрдЧрд╛, рд▓реЗрдХрд┐рди рд╣рдо рдпрд╣рд╛рдВ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдкреВрдЫреЗ рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдкреНрд░рд╢реНрдиреЛрдВ рдХреЛ рдХрд░рддреЗ рд╣реИрдВред
рдпрд╣рд╛рдБ рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдЖрдк --declaration
рдзреНрд╡рдЬ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╕рдВрдХрд▓рдХ рдХреЛ рдЕрдкрдирд╛ рдХрд╛рдо рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рд░рд╛рд╕реНрддрд╛ рдирд╣реАрдВ рджрд┐рдпрд╛ рд╣реИред
рдЬрдм ModuleA.d.ts
рдХрд╛ рдЙрддреНрд╕рд░реНрдЬрди рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рдЬрд╛ рд░рд╣реА рд╣реИ, рддреЛ рдХрдВрдкрд╛рдЗрд▓рд░ рдХреЛ рдореЙрдбреНрдпреВрд▓ рдХреЗ рдЖрдХрд╛рд░ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рддреЗ рд╣реБрдП рдСрдмреНрдЬреЗрдХреНрдЯ рдкреНрд░рдХрд╛рд░ рд╢рд╛рдмреНрджрд┐рдХ (рдЬреИрд╕реЗ { moduleB: { classA: *mumble?* } }
) рд▓рд┐рдЦрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рд▓реЗрдХрд┐рди рдЗрд╕рдореЗрдВ рдХреЛрдИ рдРрд╕рд╛ рдирд╛рдо рдирд╣реАрдВ рд╣реИ рдЬреЛ рд╕реАрдзреЗ рддреМрд░ рдкрд░ classA
рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣ "рдирд╛рдо рдирд╣реАрдВ рджрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛" рдФрд░ рдПрдХ рддреНрд░реБрдЯрд┐ рд╣реИред
рдпрджрд┐ рдЖрдк import
ClassA
ModuleA.ts
рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ, рддреЛ рддреНрд░реБрдЯрд┐ рджреВрд░ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдПред
рд╣рд╛рдп рд░рдпрд╛рди - рд╕рд▓рд╛рд╣ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж рдЖрд░рдИ рдвреЗрд░ рдЕрддрд┐рдкреНрд░рд╡рд╛рд╣ рдФрд░ рд╕рд▓рд╛рд╣ - ModuleA
рд▓рд┐рдП рдЖрдпрд╛рдд рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдореНрдореАрдж рдХреЗ рдЕрдиреБрд░реВрдк рдЪреАрдЬреЗрдВ рдорд┐рд▓реАрдВред
рдпрд╣рд╛рдВ рдереЛрдбрд╝рд╛ рд╕рд╛ рд╕рдВрджрд░реНрдн - рдореЗрд░рд╛ рд▓рдХреНрд╖реНрдп рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдореЗрд░реЗ рдмрд╛рд╣рд░реА рдореЙрдбреНрдпреВрд▓ рдХреЗ рд▓рд┐рдП рдШреЛрд╖рдгрд╛рдУрдВ рдХреЛ рдЙрддреНрдкрдиреНрди рдХрд░рдирд╛ рд╣реИред (рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛрд╣реИ рдХрд┐ рдЕрднреА рддрдХ рдХрд╛рдлреА рдХрд╛рдо рдирд╣реАрдВ рд╣реБрдЖ рд╣реИ? # 5039?) рдпрд╣ рдЖрдпрд╛рдд рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ ModuleA
рдЕрдЬреАрдм ModuleB
рдСрдмреНрдЬреЗрдХреНрдЯ рдСрдмреНрдЬреЗрдХреНрдЯ рдПрдХреНрд╕рдкреЛрд░реНрдЯ рдХрд░рддрд╛ рд╣реВрдВ, рддреЛ рдореБрдЭреЗ рд╕реАрдзреЗ ModuleA
- рдореЗрдВ рдЗрдореНрдкреЛрд░реНрдЯ рдЬреЛрдбрд╝рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА:
import {moduleB} from './moduleB';
import {ClassA} from './ClassA';
рдпрд╛ ModuleB
(рджреЛрдиреЛрдВ рд╕реНрдерд╛рдиреЛрдВ рдореЗрдВ ClassA
рд▓рд┐рдП рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдкрде рдХреЛ рдХрдо рдХрд░рдиреЗ рдХреЗ рдкреНрд░рдпрд╛рд╕ рдореЗрдВ):
import {moduleB, ClassA} from './moduleB';
рдореБрдЭреЗ рдЯреАрдПрд╕ рдХрдВрдкрд╛рдЗрд▓рд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╣реБрдд рдХрдо рдкрддрд╛ рд╣реИ - рдЗрд╕рд▓рд┐рдП рд╢рд╛рдпрдж рдореИрдВ рдЬреЛ рдХрд╣ рд░рд╣рд╛ рд╣реВрдВ рд╡рд╣ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╣реИ, рд▓реЗрдХрд┐рди рдкрд╣рд▓реЗ рд╕реЛрдЪрд╛ рдХрд┐ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдХрдВрдкрд╛рдЗрд▓рд░ рдпрд╣ рдШрдЯрд╛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ ModuleB
рдЙрд╕ рдкрд░ рдПрди рдкреНрд░рддреАрдХреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рд╡рд╕реНрддреБ рдирд┐рд░реНрдпрд╛рдд рдХрд░ рд░рд╣рд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП ModuleA
рдХреЛ рдЙрди рдкреНрд░рддреАрдХреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ? ModuleB
рд▓рд┐рдП рдЖрдпрд╛рдд рдХреА рдЬрд╛рдирдХрд╛рд░реА рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╣реИ - ModuleA
рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ? рдпрд╛ рдХрд┐ рдЕрд╕рдВрднрд╡ рд╣реЛрдЧрд╛ рдХреНрдпреЛрдВрдХрд┐ рдХреЗ рд▓рд┐рдП рдЖрдпрд╛рдд ClassA
рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдВрддрд░рд┐рдХ рд╣реИ ModuleB
, рдЗрд╕рд▓рд┐рдП рд╡рд╣рд╛рдБ рдХреЛрдИ рд░рд╛рд╕реНрддрд╛ рдирд╣реАрдВ рд╣реИ рдХрд┐ рд╕рдВрдХрд▓рдХ рдХреЗ рд▓рд┐рдП рдкреНрд░рдХрд╛рд░ рдпрд╣ рдорд╛рди рд╕рдХрддреЗ рд╣реИрдВ рд╣реИ ClassA
рдЬрдм рдХреЗ рд▓рд┐рдП рдкрд░рд┐рднрд╛рд╖рд╛ рдмрдирд╛рдиреЗ ModuleA
?
рдЬрд╡рд╛рдм рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдордп рдирд┐рдХрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдлрд┐рд░ рд╕реЗ рдзрдиреНрдпрд╡рд╛рджред рдореИрдВрдиреЗ рдЕрдкрдиреА рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░ рд▓рд┐рдпрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдКрдкрд░ рдореБрдЦреНрдп рд░реВрдк рд╕реЗ рдЬрд┐рдЬреНрдЮрд╛рд╕рд╛ рд╣реИ - рдЬрд╡рд╛рдм рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рдЬрд▓реНрджреА рдирд╣реАрдВ рд╣реИред
рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рддреБрдо рдХреНрдпрд╛ рдХрд╣ рд░рд╣реЗ рд╣реЛред рдЗрд╕ рдкреНрд░рд╕реНрддрд╛рд╡ рдореЗрдВ ModuleA.d.ts
рдХреНрдпрд╛ рджрд┐рдЦрдирд╛ рдЪрд╛рд╣рд┐рдП?
рдХрдВрдкрд╛рдЗрд▓рд░ рдирд┐рд░реНрднрд░рддрд╛ рдирд╣реАрдВ рдЬреЛрдбрд╝реЗрдВрдЧреЗ (рдЕрд░реНрдерд╛рдд рдЖрдпрд╛рдд рд╡рд┐рд╡рд░рдг) рдЬреЛ рдШреЛрд╖рдгрд╛рдУрдВ рдХрд╛ рдЙрддреНрд╕рд░реНрдЬрди рдХрд░рддреЗ рд╕рдордп рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛрдб рдореЗрдВ рдореМрдЬреВрдж рдирд╣реАрдВ рдерд╛ред рдЖрдкрдХреЛ рдЬреЛ рддреНрд░реБрдЯрд┐ рд╣реЛ рд░рд╣реА рд╣реИ, рдЙрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рд╕рдВрдХрд▓рд┐рдд рдПрдХ рдирд┐рд░реНрдпрд╛рддрд┐рдд рдШреЛрд╖рдгрд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдПрдиреЛрдЯреЗрд╢рди рд▓рд┐рдЦрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдирд╣реАрдВ рдХрд░ рд╕рдХрд╛ред рдЗрд╕рдХреЗ рджреЛ рдХрд╛рд░рдг рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ, рдпрд╛ рддреЛ рдирд╛рдо рд╕реБрд▓рдн рдирд╣реАрдВ рд╣реИ, рдЕрд░реНрдерд╛рдд рд╡рд░реНрддрдорд╛рди рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рдЖрдпрд╛рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдпрд╛ рдПрдХ рдШреЛрд╖рдгрд╛ рд╣реИ рдЬреЛ рдореВрд▓ рдШреЛрд╖рдгрд╛ рдХреЛ рдЫрд╛рдпрд╛ рджреЗ рд░рд╣реА рд╣реИред
рджреЛрдиреЛрдВ рд╣реА рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рдЖрдкрдХрд╛ рдХрд╛рдо рд╕реНрдкрд╖реНрдЯ рдкреНрд░рдХрд╛рд░ рдХреЗ рдПрдиреЛрдЯреЗрд╢рди рдХреЛ рдЬреЛрдбрд╝рдирд╛ рд╣реИ, рдпрджрд┐ рдЖрдк рдХрд┐рд╕реА рднреА рдкреНрд░рдХрд╛рд░ рдХрд╛ рдПрдиреЛрдЯреЗрд╢рди рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ, рддреЛ рдЖрдЙрдЯрдкреБрдЯ рдореЗрдВ рдЗрд╕реЗ рд╢рдмреНрджрд╢рдГ рдЙрддреНрд╕рд░реНрдЬрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛; рджреВрд╕рд░рд╛ рд╡рд┐рдХрд▓реНрдк рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдирд╛ рд╣реИ рдХрд┐ рдирд╛рдо рд╕реБрд▓рдн рд╣реИ, рдЕрд░реНрдерд╛рдд рдЖрдкрдХреЗ рдкрд╛рд╕ рдореЙрдбреНрдпреВрд▓ рдЖрдпрд╛рдд рдХрд░рдирд╛ рд╣реИ, рдФрд░ рдЖрдк рд╕рдордЭрддреЗ рд╣реИрдВ рдХрд┐ рдЖрдкрдХреЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдЗрд╕рдХрд╛ рдХреНрдпрд╛ рдорддрд▓рдм рд╣реИ рдЬреЛ рдЖрдкрдХреЗ рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдЖрдпрд╛рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВред
@ рдореЗрдШреЗрдЬреА рдиреЗ рдХрд╣рд╛:
рдХрдВрдкрд╛рдЗрд▓рд░ рдирд┐рд░реНрднрд░рддрд╛ рдирд╣реАрдВ рдЬреЛрдбрд╝реЗрдВрдЧреЗ (рдЕрд░реНрдерд╛рдд рдЖрдпрд╛рдд рд╡рд┐рд╡рд░рдг) рдЬреЛ рдШреЛрд╖рдгрд╛рдУрдВ рдХрд╛ рдЙрддреНрд╕рд░реНрдЬрди рдХрд░рддреЗ рд╕рдордп рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛрдб рдореЗрдВ рдореМрдЬреВрдж рдирд╣реАрдВ рдерд╛ред
рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдореБрдЭреЗ рд╣рдореЗрд╢рд╛ рдХреЛрдб рдореЗрдВ рдЖрдпрд╛рдд рдХрдердиреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ (рдЬрд╛рд╣рд┐рд░ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ --declarations
рдмрд┐рдирд╛ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ), рдФрд░ рдЙрдирдореЗрдВ рд╕реЗ рд╢реЛрд░ рднреА рд╣реИ, рдЬрд┐рд╕рдХреЗ рдХрд╛рд░рдг tslint
рдЬреИрд╕реА рдЪреАрдЬреЗрдВ рд╢рд┐рдХрд╛рдпрдд рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣реИрдВред "рдЕрдкреНрд░рдпреБрдХреНрдд рдЖрдпрд╛рдд"ред рдореИрдВ рджреЗрдЦ рд╕рдХрддрд╛ рд╣реВрдБ рдХрд┐ рдЖрдк рд╕рдВрдХрд▓рдХ рдХреЛ рдЙрддреНрд╕рд░реНрдЬрд┐рдд рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдирд┐рд░реНрднрд░рддрд╛ рдХреНрдпреЛрдВ рдирд╣реАрдВ рдЬреЛрдбрд╝рдирд╛ рдЪрд╛рд╣реЗрдВрдЧреЗ, рд▓реЗрдХрд┐рди рдЙрдиреНрд╣реЗрдВ рдШреЛрд╖рдгрд╛рдУрдВ рдореЗрдВ рдЬреЛрдбрд╝рдиреЗ рд╕реЗ рдХреНрдпрд╛ рд╕рдорд╕реНрдпрд╛ рд╣реИ?
рдЗрд╕ рд╕реБрдЭрд╛рд╡ рдХреЛ рдЯреНрд░реИрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рд╕реА рд╕рдорд╕реНрдпрд╛ рдХреЛ рд▓реЙрдЧ рдЗрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрд╡рддрдВрддреНрд░ рдорд╣рд╕реВрд╕ рдХрд░реЗрдВред рддрд░реНрдХрд╕рдВрдЧрдд рдерд╛ рдЖрдпрд╛рдд рдЖрдпрд╛рдд рдирд┐рд░реНрднрд░рддрд╛ рдХреА рдШреЛрд╖рдгрд╛ рд╣реИ, рдФрд░ рдХрдВрдкрд╛рдЗрд▓рд░ рдХреЛ рдЖрдкрдХреЗ рд▓рд┐рдП рдПрдХ рдирд╣реАрдВ рдмрдирд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдЬрдм рддрдХ рдХрд┐ рдЖрдк рдЗрд╕реЗ рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрджреЗрд╢ рди рджреЗрдВред
рдЗрд╕рдХреЗ рдЧрд╣рд░реЗ рдкрд░рд┐рдгрд╛рдо рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред
moduleA
-> moduleB
-> moduleC
-> moduleD
ред
moduleB
рд╡рд╣ рд╣реИ рдЬрд┐рд╕реЗ рдЗрд╕ рдореБрджреНрджреЗ рдХреЗ рдЖрд╕рдкрд╛рд╕ рдЬрд╛рдиреЗ рдХреЗ рд▓рд┐рдП import { ABC } from 'moduleA'
рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рдЬрдм moduleC
moduleB
moduleC
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЕрдкрдиреЗ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдирд┐рд░реНрдпрд╛рдд рдХрд░рддрд╛ рд╣реИ, рддреЛ рдпрд╣ рдлрд┐рд░ рд╕реЗ рд╕рдВрдХрд▓рди рдХрд░рдиреЗ рдореЗрдВ рд╡рд┐рдлрд▓ рд░рд╣рддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ moduleB
ABC
moduleA
рд▓реЗрдХрд┐рди рдЗрд╕ рдмрд╛рд░ moduleB
рдиреЗ рдЗрд╕реЗ рдирд┐рд░реНрдпрд╛рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ред
рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рд╣реИ:
moduleC
рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреА рдПрдХ рдХрдард┐рди рдирд┐рд░реНрднрд░рддрд╛ рдХреЗ рд▓рд┐рдП moduleA
рдФрд░ рдЖрдпрд╛рдд ABC
moduleB
рдХреЛ рди рдХреЗрд╡рд▓ рдЖрдпрд╛рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдмрд▓реНрдХрд┐ ABC
рдлрд┐рд░ рд╕реЗ рдирд┐рд░реНрдпрд╛рдд рдХрд░реЗрдВ рдФрд░ рдлрд┐рд░ moduleC
рдЖрдпрд╛рдд рдХрд░реЗрдВредрдпрджрд┐ moduleD
рд╕рдорд╛рди рдЪреАрдЬреЗрдВ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдореВрд▓ рд░реВрдк рд╕реЗ рдЖрдкрдХреЛ рдирд┐рд░реНрднрд░рддрд╛ рдХреА рдкреВрд░реА рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХреЛ рдЬрд╛рдирдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рдореИрдВ рдпрд╣ рд╕рд╛рдмрд┐рдд рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдирд╣реАрдВ рдерд╛ рдХрд┐ рдпрд╣ рдорд╛рдорд▓рд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдореИрдВ typings
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдФрд░ рдореБрдЭреЗ рдЕрд╡рд░реБрджреНрдз рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдПрдХ рдореБрджреНрджрд╛ рд╣реИ: https://github.com/typings/typings/issues/625 ~~
рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ: рдореИрдВ рдЗрд╕реЗ рдкреБрди: рдкреЗрд╢ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реВрдВ рдФрд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдореЗрд░реЗ moduleD
moduleA
рдХреЛ рдЖрдпрд╛рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП
рдореЗрд░реЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ:
moduleA
=> redux
moduleB
=> redux-thunk
moduleC
=> redux-thunk
рд╢реАрд░реНрд╖ рдкрд░ рдХрд╕реНрдЯрдо рдХреЛрдбmoduleD
=> рдХреБрдЫ рдкреБрд╕реНрддрдХрд╛рд▓рдпABC
=> Dispatch
рдЗрдВрдЯрд░рдлрд╝реЗрд╕ redux
рдореБрдЭреЗ @unional рджреНрд╡рд╛рд░рд╛ рд╡рд░реНрдгрд┐рдд рдПрдХ рд╣реА рд╕рдорд╕реНрдпрд╛ рд╣реИ
рдХреГрдкрдпрд╛ рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рдлрд┐рд░ рд╕реЗ рдЦреЛрд▓реЗрдВ, @unional рджреНрд╡рд╛рд░рд╛ рдЙрд▓реНрд▓рд┐рдЦрд┐рдд рдореБрджреНрджреЗ рдмрд╣реБрдд рдпрдерд╛рд░реНрдерд╡рд╛рджреА рд╣реИрдВ рдФрд░ рдпрд╣ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЗ рд╢реАрд░реНрд╖ рдкрд░ рдХрд┐рд╕реА рднреА рдордзреНрдпрд╡рд░реНрддреА / рд╕рд╣рд╛рдпрдХ
Https://github.com/Microsoft/TypeScript/issues/9944 рдЯреНрд░реИрдХреНрд╕ рдХреЛ рдбрд┐рдХреНрд▓реЗрд░реЗрд╢рди рдПрдорд┐рдЯ рдЪрд░рдг рдореЗрдВ рдЖрдпрд╛рдд рдХрд░рдирд╛ред
рдзрдиреНрдпрд╡рд╛рдж!
рдЖрдпрд╛рдд рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд╕рд╛рде рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ noUnusedLocals
рдХреЗ рд╕рд╛рде рд╕рдВрдХрд▓рдХ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдкреНрд░рдХрд╛рд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╢рд┐рдХрд╛рдпрдд рдХрд░реЗрдЧрд╛ред рдореИрдВ рдПрдХ рд╕реНрдкрд╖реНрдЯ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдПрдиреЛрдЯреЗрд╢рди рдЬреЛрдбрд╝ рд╕рдХрддрд╛ рдерд╛, рд▓реЗрдХрд┐рди рддрдм рдореБрдЭреЗ рдЕрдиреБрдорд╛рди рдирд╣реАрдВ рд▓рдЧрддрд╛ред рдЙрджрд╛рд╣рд░рдг:
class Whatever {
fetch(uri: string): Promise<void> { }
ensureFetched = MemoizedFunction<(uri: string) => Promise<void>> = memoize((uri: string) => this.fetch(uri))
}
рдореИрдВ ensureFetched
рд▓рд┐рдП рдПрдиреЛрдЯреЗрд╢рди рдкреНрд░рдХрд╛рд░ рдХреЛ рдЫреЛрдбрд╝рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛
рдореБрдЭреЗ рдЗрд╕рдХреЗ рд▓рд┐рдП рд╡рд░реНрдХрдЕрд░рд╛рдЙрдВрдб рдорд┐рд▓рд╛:
tsconfig рдореЗрдВ: include: [ ..., "node_modules/@your_scope/your_library" ]
рд╢реБрднрдХрд╛рдордирд╛рдПрдБ рдФрд░ рдордЬрд╝реЗ рдХрд░реЗрдВ: рд╕реНрдорд╛рдЗрд▓реА:
@ salim7 рдпрд╣ рдЖрдкрдХреЗ рд╕рдВрдХрд▓рди рд╕рдордп рдХреЛ рдзреАрдорд╛ рдХрд░ рджреЗрддрд╛ рд╣реИ (рдХреНрдпреЛрдВрдХрд┐ рдЖрдк рдПрдХ рдРрд╕реА рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЛ рдкреБрдирдГ рд╕реНрдерд╛рдкрд┐рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдЬреЛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╕рдВрдХрд▓рд┐рдд рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП) рдФрд░ рдЖрдкрдХреЛ рд▓рдХреНрд╖реНрдп рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ рд╕рд╛рде рдХрдо рд╕реЗ рдХрдо рд╕рд╛рдорд╛рдиреНрдп рд╕реЗрдЯрд┐рдВрдЧ рдХреЗ рд╕рдЦреНрддреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдХрд░рддрд╛ рд╣реИред
@mhegazy рд╕рдорд╕реНрдпрд╛ рдиреЗ рдЕрдЧрд▓реЗ рдкрд░рд┐рджреГрд╢реНрдп рдореЗрдВ рдкреБрди: рдкреЗрд╢ рдХрд┐рдпрд╛:
import * as Foo from "./Foo";
export class Bar {
baz = new Foo.Baz(); // Compiler forgot "Foo." prefix in the type, and throws this error, because "Baz" without perfix is not imported.
getBaz() { // All the same
return new Foo.Baz();
}
}
рд╕рдорд╛рдзрд╛рди рд╕реНрдкрд╖реНрдЯ рдкреНрд░рдХрд╛рд░ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рд╣реИ:
import * as Foo from "./Foo";
export class Bar {
baz: Foo.Baz = new Foo.Baz(); // ok
getBaz(): Foo.Baz { // ok
return new Foo.Baz();
}
}
рдореИрдВ рдКрдкрд░ рдХреЗ рдирдореВрдиреЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рдкреБрди: рдкреЗрд╢ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ред рдХреГрдкрдпрд╛ рдПрдХ рдирдпрд╛ рдмрдЧ рджрд░реНрдЬ рдХрд░реЗрдВ, рдФрд░ рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рдкреБрди: рдкреЗрд╢ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рд╕рдВрджрд░реНрдн рдкреНрд░рджрд╛рди рдХрд░реЗрдВред
@ рдзрдиреНрдпрд╡рд╛рдж рдзрдиреНрдпрд╡рд╛рдж! рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП рдерд╛!
рдореИрдВрдиреЗ рдЗрд╕ рдореБрджреНрджреЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рд╕рд╛рдордирд╛ рдХрд┐рдпрд╛ рд╣реИ:
export { IMyInterface } from './file'
````
The solution was to do this:
```ts
import { IMyInterface } from './file'
export { IMyInterface }
рд▓реЗрдХрд┐рди рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЖрд╡рд╢реНрдпрдХ tbh рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред
рдХреНрдпрд╛ рдХрд┐рд╕реА рдХреЛ рдкрддрд╛ рдЪрд▓рд╛ рдХрд┐ noUnusedLocals
рд╕реЗ рдХреИрд╕реЗ рдирд┐рдкрдЯреЗрдВ?
@yordis // @ts-ignore
@pelotom рд╣рд╛рдБ, рдпрд╣ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдореЗрд░реА рдЧрд▓рддреА рд╣реИ,
рдореИрдВ рдПрдХ рдмрд╛рдд рдкрд░ рд╕реЛрдЪ рд░рд╣рд╛ рдерд╛ рдФрд░ рдореИрдВрдиреЗ рдХреБрдЫ рдФрд░ рд▓рд┐рдЦрд╛ред
рдХреНрдпрд╛ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдиреЗ noUnusedLocals
рдФрд░ рдШреЛрд╖рдгрд╛рдУрдВ рдХреЗ рдмреАрдЪ рдХрд╛ рдореБрджреНрджрд╛ рддрдп рдХрд┐рдпрд╛ рдерд╛?
рдореЗрд░рд╛ рд╡рд░реНрддрдорд╛рди рд╡рд░реНрдХрдЕрд░рд╛рдЙрдВрдб, рдЬреЛ рдореБрдЭреЗ рдХреБрд▓ рджрд░реНрдж рдХреА рддрд░рд╣ рд▓рдЧрддрд╛ рд╣реИ,
import {SomeInterface} from "./SomeFile";
const _dummySomeInterface : undefined|SomeInterface = undefined;
_dummySomeInterface;
//Code that implicitly uses SomeInterface
рдЕрд╡реЙрдЗрдб noUnusedLocals
, рдЬрд╣рд╛рдВ рд╕рдВрднрд╡ рд╣реЛ, рд╡рд╣рд╛рдВ рднреА рд╕рд╛рдорд╛рдиреНрдп рдЗрдВрдЯрд░рдлреЗрд╕ рдХреЗ рд▓рд┐рдП рдкреНрд░рдХрд╛рд░ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред
рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА
рдПрдлрдбрдмреНрд▓реНрдпреВрдЖрдИрдбрдмреНрд▓реНрдпреВ рдЖрдкрдХреЛ рдЖрдорддреМрд░ рдкрд░ рд╕реНрдЯреИрдХ рдУрд╡рд░рдлреНрд▓реЛ рдкрд░ рддреЗрдЬреА рд╕реЗ рдЬрд╡рд╛рдм рдорд┐рд▓реЗрдЧрд╛, рд▓реЗрдХрд┐рди рд╣рдо рдпрд╣рд╛рдВ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдкреВрдЫреЗ рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдкреНрд░рд╢реНрдиреЛрдВ рдХреЛ рдХрд░рддреЗ рд╣реИрдВред
рдпрд╣рд╛рдБ рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдЖрдк
--declaration
рдзреНрд╡рдЬ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╕рдВрдХрд▓рдХ рдХреЛ рдЕрдкрдирд╛ рдХрд╛рдо рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рд░рд╛рд╕реНрддрд╛ рдирд╣реАрдВ рджрд┐рдпрд╛ рд╣реИредрдЬрдм
ModuleA.d.ts
рдХрд╛ рдЙрддреНрд╕рд░реНрдЬрди рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рдЬрд╛ рд░рд╣реА рд╣реИ, рддреЛ рдХрдВрдкрд╛рдЗрд▓рд░ рдХреЛ рдореЙрдбреНрдпреВрд▓ рдХреЗ рдЖрдХрд╛рд░ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рддреЗ рд╣реБрдП рдСрдмреНрдЬреЗрдХреНрдЯ рдкреНрд░рдХрд╛рд░ рд╢рд╛рдмреНрджрд┐рдХ (рдЬреИрд╕реЗ{ moduleB: { classA: *mumble?* } }
) рд▓рд┐рдЦрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рд▓реЗрдХрд┐рди рдЗрд╕рдореЗрдВ рдХреЛрдИ рдРрд╕рд╛ рдирд╛рдо рдирд╣реАрдВ рд╣реИ рдЬреЛ рд╕реАрдзреЗ рддреМрд░ рдкрд░classA
рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣ "рдирд╛рдо рдирд╣реАрдВ рджрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛" рдФрд░ рдПрдХ рддреНрд░реБрдЯрд┐ рд╣реИредрдпрджрд┐ рдЖрдк
import
ClassA
ModuleA.ts
рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ, рддреЛ рддреНрд░реБрдЯрд┐ рджреВрд░ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдПред