Javascript 如何正确处理es6 Map的类型<;K、 V>;使用Typescript时的函数?
我有一门课是这样的:Javascript 如何正确处理es6 Map的类型<;K、 V>;使用Typescript时的函数?,javascript,typescript,types,typescript-typings,Javascript,Typescript,Types,Typescript Typings,我有一门课是这样的: export class Broker<T> implements BrokerContract<T> { topicToSubscribersMap: Map<string, Set<Subscriber<T>>>; . . . pub
export class Broker<T> implements BrokerContract<T> {
topicToSubscribersMap: Map<string, Set<Subscriber<T>>>;
.
.
.
public registerSubscriber(topic: string, subscriber: Subscriber<T>): void {
if (this.topicToSubscribersMap.get(topic)) {
let currentSubscribers: Set<Subscriber<T>> = this.topicToSubscribersMap.get(topic);
}
}
.
.
}
还是这个-
let currentSubscribers: Set<Subscriber<T>> = this.topicToSubscribersMap.get(topic) as Set<Subscriber<T>>;
let currentSubscribers:Set=this.topicToSubscribersMap.get(主题)为Set;
但我关心的是,为什么在我已经检查所附if
条件中的undefined
时还需要这样做
另外,由于这是
get
方法的签名本身,该方法使用Map
返回V | undefined
类型,假设这种情况通常最常见-处理它的最佳方法是什么?TypeScript不够聪明,无法缩小函数调用的结果范围,因为该调用被假定为非纯调用(即,它可能在后续调用中使用相同的参数返回不同的值)
如果您先指定一个变量:
const topic = this.topicToSubscribersMap.get(topic);
if (topic){
// topic is narrowed to Set<Subscriber<T>>
}
const topic=this.topicToSubscribersMap.get(主题);
如果(主题){
//话题缩小到了设定的范围
}
TypeScript不够聪明,无法缩小函数调用的结果范围,因为该调用被假定为非纯调用(即,它可能会在后续调用中使用相同的参数返回不同的值)
如果您先指定一个变量:
const topic = this.topicToSubscribersMap.get(topic);
if (topic){
// topic is narrowed to Set<Subscriber<T>>
}
const topic=this.topicToSubscribersMap.get(主题);
如果(主题){
//话题缩小到了设定的范围
}
在您的示例中,我们从函数调用的返回类型推断类型。如果我们想在使用某些类型之前声明所有这些变量,以确保它们得到我们期望的结果,该怎么办?在您的示例中,我们是从函数调用的返回类型推断类型。如果我们想在使用某些类型之前声明所有这些变量,以确保它们得到我们期望的结果,该怎么办?