在 TypeScript 定义文件中声明一个 super class
Declaring a super class in a TypeScript definition file
我正在尝试在 TypeScript 中创建一个超级 class,它将作为各种其他文件中其他 classes 的模板。因为我想在多个项目中重用 class 我想在定义文件中声明它。
这是我目前拥有的三个文件:
app.ts
/// <reference path="genericStuff.d.ts" />
module Foo.Sub {
export class MyClass extends SomeSuperClass {
constructor(input: string) {
super();
console.log(input);
}
someTemplateMethod = () => { console.log("working..."); }
}
}
genericStuff.ts
/// <reference path="genericStuff.d.ts" />
module Foo {
export class SomeSuperClass {
constructor() {
console.log("Super constructor");
}
someTemplateMethod = () => { /* no op */ }
anotherTemplateMethod = () => { /* no op */ }
}
export class SomeOtherClass implements IDoSomething {
doSomething() { }
}
}
genericStuff.d.ts
declare module Foo {
interface IDoSomething {
doSomething: () => void;
}
export class SomeSuperClass {
someTemplateMethod: () => void;
anotherTemplateMethod: () => void;
}
}
这给我一个错误:
error TS2300: Duplicate identifier 'SomeSuperClass'.
这很有道理,但没有帮助。
我不想直接从 app.ts
引用 genericStuff.ts
,但我确实想从该文件扩展 class .这可能吗?
您需要删除 genericStuff.ts
文件中对 genericStuff.d.ts
的引用。从 TypeScript 的角度来看,您定义了相同的 class 两次。
有以下文件:
module Foo {
export interface IDoSomething {
doSomething: () => void;
}
export class SomeSuperClass {
constructor() {
console.log("Super constructor");
}
someTemplateMethod = () => { /* no op */ }
anotherTemplateMethod = () => { /* no op */ }
}
export class SomeOtherClass implements IDoSomething {
doSomething() { }
}
}
用 -d
编译让 typescript 创建 .d.ts
文件,它看起来像:
declare module Foo {
interface IDoSomething {
doSomething: () => void;
}
export class SomeSuperClass {
someTemplateMethod: () => void;
anotherTemplateMethod: () => void;
}
export class SomeOtherClass implements IDoSomething {
doSomething():void;
}
}
然后您可以使用 app.ts
我正在尝试在 TypeScript 中创建一个超级 class,它将作为各种其他文件中其他 classes 的模板。因为我想在多个项目中重用 class 我想在定义文件中声明它。
这是我目前拥有的三个文件:
app.ts
/// <reference path="genericStuff.d.ts" /> module Foo.Sub { export class MyClass extends SomeSuperClass { constructor(input: string) { super(); console.log(input); } someTemplateMethod = () => { console.log("working..."); } } }
genericStuff.ts
/// <reference path="genericStuff.d.ts" /> module Foo { export class SomeSuperClass { constructor() { console.log("Super constructor"); } someTemplateMethod = () => { /* no op */ } anotherTemplateMethod = () => { /* no op */ } } export class SomeOtherClass implements IDoSomething { doSomething() { } } }
genericStuff.d.ts
declare module Foo { interface IDoSomething { doSomething: () => void; } export class SomeSuperClass { someTemplateMethod: () => void; anotherTemplateMethod: () => void; } }
这给我一个错误:
error TS2300: Duplicate identifier 'SomeSuperClass'.
这很有道理,但没有帮助。
我不想直接从 app.ts
引用 genericStuff.ts
,但我确实想从该文件扩展 class .这可能吗?
您需要删除 genericStuff.ts
文件中对 genericStuff.d.ts
的引用。从 TypeScript 的角度来看,您定义了相同的 class 两次。
有以下文件:
module Foo {
export interface IDoSomething {
doSomething: () => void;
}
export class SomeSuperClass {
constructor() {
console.log("Super constructor");
}
someTemplateMethod = () => { /* no op */ }
anotherTemplateMethod = () => { /* no op */ }
}
export class SomeOtherClass implements IDoSomething {
doSomething() { }
}
}
用 -d
编译让 typescript 创建 .d.ts
文件,它看起来像:
declare module Foo {
interface IDoSomething {
doSomething: () => void;
}
export class SomeSuperClass {
someTemplateMethod: () => void;
anotherTemplateMethod: () => void;
}
export class SomeOtherClass implements IDoSomething {
doSomething():void;
}
}
然后您可以使用 app.ts