【发布时间】:2018-09-15 12:15:13
【问题描述】:
// `./module.ts`
export class User
{
name: string
surname: string
age: number
}
es6 导入
import * as module from "./module" 生成 namespace module 这很糟糕。
-
从
module致电typeof module刹车class generics:User类型不能分配给typeof User类型的参数 这个
module不能被另一个namespace module {}或interface module {}调用扩展。
问:
- 有没有办法在泛型中使用
namespace作为class? - 有没有办法将模块中的许多类导出为类类型而不需要手工关联?
namespace _0.A - real behavior
namespace _0.B - expected behavior
namespace _1.extend - extend expected behavior
查看typescriptlang.org/play 或继续阅读
// import { User } from "./module"
// import * as module from "./module"
// equal this:
class User
{
name: string
surname: string
age: number
}
namespace module
{
export class User
{
name: string
surname: string
age: number
}
}
namespace _1
{
let store = {}
type store<T> = {
[K in keyof T]: T[K][]
}
export function set<T>(k: keyof T, val: T[keyof T])
{
if (!(store as store<T>)[k]) (store as store<T>)[k] = [];
(store as store<T>)[k].push(val)
}
}
namespace _1.A
{
type mo = typeof module;
// --
set<mo>('User', new User) // [ts] Argument of type 'User' is not assignable to parameter of type 'typeof User'.
}
namespace _1.B
{
class mo
{
User: User
}
// --
set<mo>('User', new User) // ok
}
namespace _1.extend
{
class Admin
{
superpover: true
}
// --
class mo
{
User: User
}
class moExt extends mo
{
Admin: Admin
}
// --
set<moExt>('Admin', new Admin)
}
namespace _0.A
{
type m = typeof module;
type user = m['User'] // bad // type user = typeof User
let age: user['age'] // err // [ts] Property 'age' does not exist on type 'typeof User'.
}
namespace _0.B
{
class m
{
User: User
}
type user = m['User'] // good // type user = User
let age: user['age'] // ok //
}
【问题讨论】:
标签: typescript generics