Est*_*ask 5 symbols typescript
这个演示使typeof Symbol.toStringTag类型symbol:
const promise = Promise.resolve();
const toStr: typeof Symbol.toStringTag | void = typeof Symbol === 'function' ? Symbol.toStringTag : undefined;
if (toStr) {
console.log(promise[toStr] === 'Promise');
}
Run Code Online (Sandbox Code Playgroud)
并导致错误:
元素隐式具有 'any' 类型,因为类型 'symbol' 的表达式不能用于索引类型 'Promise'。(7053)
有没有办法缩小toStr符号类型而不是明确使用符号promise[Symbol.toStringTag]?
正如您所注意到的,typeof Symbol.toStringTag只是symbol,这对于您的目的来说不够具体。类型更具体,但我相信它仅适用于用户定义的符号unique symbol。
使用访问器函数而不是存储符号是否可以满足您的需求?
const promise = Promise.resolve();
interface StringTaggable {
readonly [Symbol.toStringTag]: string;
}
const toStringTag =
typeof Symbol === 'function' ? (o: StringTaggable) => o[Symbol.toStringTag] : undefined;
if (toStringTag) {
console.log(toStringTag(promise) === 'Promise');
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1031 次 |
| 最近记录: |