Mat*_*bec 3 generics typescript
有没有办法说方法的传递类型参数不能是数组?
示例类
class A {
public f<T /*which is not array*/>(obj: T) { /* ... */ }
}
Run Code Online (Sandbox Code Playgroud)
此代码不会被编译:
const a = new A();
a.f<number[]>([42, 42]);
Run Code Online (Sandbox Code Playgroud)
就在这里:
class A {
public f<T>(obj: T extends Array<any> ? never : T) { /* ... */ }
}
const x = new A();
x.f(1) // ok
x.f([]) // error
x.f([1]) // error
Run Code Online (Sandbox Code Playgroud)
顺便说一句,TypeScript 中没有否定类型。例如,你不能写 smth like: not Array<any>or !Array<any>,但 TS 有条件类型。
在我的示例中,never如果参数是数组,我将返回。
这是什么意思?
这意味着,TS 将期望一个带有never类型的参数。
诀窍是,你不能never从字面上产生类型。
您可以创建自己的否定类型:
type Not<T, R> = R extends T ? never: R;
Run Code Online (Sandbox Code Playgroud)
谢谢@Eldar!
| 归档时间: |
|
| 查看次数: |
51 次 |
| 最近记录: |