在Elm,我们可以写
import Html exposing (Html)
然后我们不需要输入Html.Html,只需要Html就足够了(不合格),从而避免重复。我们仍然可以使用 Html 作为命名空间,例如Html.text(合格)。
我们如何在打字稿中实现这一目标?例如,
person.ts:
interface Person {
name: string;
age: number;
}
function isAdult(p: Person): boolean {
return p.age >= 18;
}
export {
Person,
isAdult
};
other.ts:
import * a Person from "./person"
//Then I want to be able to use both Person.isAdult and Person (as the interface)
答案 0 :(得分:1)
截至今天(2.1.0
),没有办法从使用相同标识符的模块导入定义。换句话说,您不能将Person
接口和Person
对象作为命名空间导入。
从模块中导出类型和功能。
// person.ts
export interface Person {
name: string;
age: number;
}
export function isAdult(p: Person): boolean {
return p.age > 18;
}
现在,您可以使用ES2015导入语法将所有内容作为单个对象导入。这看起来像一个命名空间,但它不是TypeScript的命名空间。
// index.ts
import * as Person from './person';
let person: Person.Person = { name: 'John', age: 20 };
console.log(Person.isAdult(person);
请不要感到困惑,TypeScript中有一项功能用于提供namespaces,但由于ES2015导入语法,现在它已过时。