第三方库中有功能扩展对象以向其添加更多功能。例如seamless-immutable
我想为这样的库创建定义文件。
中我想到了一些东西interface ImmutableMethods<T> extends T{
set?<U>(key: string | number, value: any): T | U;
setIn?<U>(keys: Array<string>, value: any): T | U;
...
}
function Immutable<T>(obj: T, options?): ImmutableMethods<T>
然后我将能够将自己的类型声明为:
interface Type1 {prop1, prop2}
interface Type2 {propOfType1: ImmutableMethods<Type1>}
var immutableType2:Type2 = Immutable(...)
然后我将在所有对象上使用Immutable函数。
但问题是,行interface ImmutableMethods<T> extends T
给了我一个错误“一个接口可能只扩展一个类或另一个接口”
有没有办法声明T是一个接口,还是一种其他方式来获得这种扩展行为?
答案 0 :(得分:2)
您可以使用交集类型来实现此行为。为额外功能定义一个接口,并定义一个T&amp;接口。我对您的代码的修改:
<form action="./Login.php" method="post" onsubmit="return checkInput();">
<table width="300" border="1">
<tbody>
<tr>
<th>UserName:</th>
<td>
<input class="box" type="text" value="" name="uname" id="uname">
</td>
</tr>
<tr>
<th>Password:</th>
<td>
<input class="box" type="password" value="" name="pword" id="uname">
</td>
</tr>
</tbody>
</table>
<input type="hidden" id="infoDis" value="" />
<input type="submit" value="Log-in" name="login">
<input type="submit" value="Reset" name="reset">
</form>
Options +FollowSymLinks -MultiViews
# Turn mod_rewrite on
RewriteEngine On
RewriteBase /
RewriteRule ^portal/(.*)$ /$1 [L,NC,R]
RewriteRule ^subportal/(.*)$ /$0 [L,NC,R]
接口定义了所涉及的功能。 interface ImmutableMethods<T> {
set?<U>(key: string | number, value: any): T | U;
setIn?<U>(keys: Array<string>, value: any): T | U;
}
type ImmutableExtended<T> = ImmutableMethods<T> & T;
interface Type1 { prop1: string, prop2: string }
interface Type2 { propOfType1: ImmutableExtended<Type1> }
var immutableType2: Type2 = ...;
类型是我们实际想要用于扩展对象的接口,当然您可以随意命名这些接口。