小编Jam*_*ing的帖子

打字稿:访问数组元素不考虑未定义返回值的可能性

以下通过 Typescript 类型检查器 (v2.9.1),但TypeError在运行时抛出 a 。

interface Item { id: string }
const list: Item[] = [{ id: 'a' }, { id: 'b' }];
const item = list[3]; // type: Item
const itemId = item.id; // type: string
Run Code Online (Sandbox Code Playgroud)

鉴于访问类型化数组中的元素总是可以返回undefined, item 不应该是item: Item | undefined,这会迫使您进行空检查吗?

更令我惊讶的是,以下还进行了类型检查:

const item2: Item | undefined = list[3];
const item2Id = item2.id;
Run Code Online (Sandbox Code Playgroud)

虽然转换返回的值确实成功地失败了类型检查:

const item3 = list[3] as Item | undefined;
const item3Id = item3.id; // [ts] Object is possibly …
Run Code Online (Sandbox Code Playgroud)

typescript

23
推荐指数
1
解决办法
6020
查看次数

将 React forwardRef 与 Typescript 通用 JSX 参数一起使用

鉴于以下使用泛型类型参数的类型化 React 组件,我将如何将其包装在 React 的新forwardRefAPI 中?

type Props<T> = {
  forwardedRef?: Ref<HTMLInputElement>
  ...
}

class GenericComponent<T> extends Component<Props<T>> {
  ...
}

const ComponentWithRef = forwardRef<HTMLInputElement, Props<T>>((props, ref) => (
  <StringInput<T> {...props} forwardedRef={ref} />
))
Run Code Online (Sandbox Code Playgroud)

上面的方法没有办法定义T泛型。

typescript reactjs

20
推荐指数
1
解决办法
9969
查看次数

将服务注入Ember对象[不是Ember控制器]

我正在尝试将Ember服务注入Ember对象,但不断收到以下错误:

"Assertion Failed: Attempting to lookup an injected property on an
object without a container, ensure that the object was instantiated 
via a container."
Run Code Online (Sandbox Code Playgroud)

我的代码基本上类似于以下内容:

const Model = Ember.Object.extend({
  store: Ember.inject.service(),

  destroyRecord() {...},

  serialize() {...},

  deserialize() {...},
});

let newModel = Model.create();
newModel.get('store');
Run Code Online (Sandbox Code Playgroud)

注意:如果我将服务注入Controller而不是对象,它确实有效.没有任何运气试图找出如何使用Ember容器注册Object.

ember.js

12
推荐指数
1
解决办法
5998
查看次数

基于聚合值而不是点数计算mapboxgl中的标记聚类

我一直在寻找MapBox GL中的聚类标记(https://www.mapbox.com/mapbox-gl-js/example/cluster/),但我希望这样做有点不同.

从本质上讲,我有一个geojson文件,其中包含我们校园内每栋建筑物(点)的事件数.我想在标记中显示该数字,然后当缩小时,标记会折叠并将该标记的值添加到一起.

我看到的聚类示例只是计算点数,但似乎没有提供聚合属性.这样的事情可行吗?

markerclusterer mapbox mapbox-gl-js

9
推荐指数
2
解决办法
1424
查看次数

在 Leaflet 的事件回调中设置图层类名

我希望通过设置 geojson 功能的className. 如果直接放在功能上,效果非常好,如下所示:

L.geoJson(geojson, {
    onEachFeature: function (feature, layer) {
        layer.setStyle({className: 'grid-cell'});
    }
}).addTo(map);
Run Code Online (Sandbox Code Playgroud)

使用 .css 文件中定义的样式

path.grid-cell{
  stroke-opacity: 1;
  stroke: #444;
  fill: #aaa;
}
Run Code Online (Sandbox Code Playgroud)

但是,如果添加到功能的事件回调中,它将不起作用:

L.geoJson(geojson, {
    onEachFeature: function (feature, layer) {
        layer.on('click', function(e){
          this.setStyle({className: 'grid-cell'});
          this.bringToFront();
        });
    }
}).addTo(map);
Run Code Online (Sandbox Code Playgroud)

令人惊讶的是,除了、 例如、、等之外,setStyle({<style_options>});这两种情况都适用于所有其他L.path选项。 classNamecolorfillOpacityweight

例如

L.geoJson(geojson, {
    onEachFeature: function (feature, layer) {
        // this works
        layer.setStyle({color: '#faa', fillOpacity: 0.4, weight: 1});

        // this works too
        layer.setStyle({className: 'grid-cell'});

        layer.on('click', …
Run Code Online (Sandbox Code Playgroud)

javascript svg leaflet

5
推荐指数
1
解决办法
1882
查看次数

提供来自 Google Cloud Storage 的静态 SPA 和来自 Google App Engine 的 API

我有一个由 REST API 提供服务的静态 Web 客户端 SPA。我正在尝试找出在 Google 的云平台上使用 App Engine 托管 API 和使用云存储托管静态 Web 客户端的最佳方式来托管这些应用程序。

如果我从头开始这样做,一个简单的反向代理可以管理 API 和客户端资产之间的路由流量。为了用 GCP 做等效的事情,我查看了以下内容:

  • Google 的 Compute Engine 支持基于内容的负载平衡:尽管 App Engine 不支持
  • App Engine 上的 API 可以将请求代理到 Cloud Storage,但代价是 API 服务上的不必要负载
  • 只需将 API 和客户端托管在不同的域(分别为 App Engine 和 Cloud Storage),并正确配置跨域问题
  • 使用Google Cloud Endpoints作为反向代理在 App Engine 和 Cloud Storage 之间适当地路由流量:尚未完全探索此选项,但在撰写本文时,Cloud Endpoints 不支持路由到多个主机(仅在 v3 OpenAPI 规范)。

以上都有局限性。我正在尝试做的事情似乎相当传统,但我不确定 GCP 上阻力最小的路径是什么。

google-app-engine google-cloud-storage google-cloud-endpoints google-cloud-platform

5
推荐指数
1
解决办法
2114
查看次数

ramda.js中chain()和map()之间的区别

chain()(来自ramda包)和map()Javascript 之间有什么区别?

在这两个函数中,程序员输入一个对象和一些lambda /函数,并对其进行一定的计算.谢谢.

javascript ramda.js

3
推荐指数
1
解决办法
667
查看次数