У меня есть этот Flux магазин класс:Как получить тип общего параметра в TypScript?
'use strict';
import flux = require('app/tools/flux');
import types = require('app/tools/types');
import Actions = require('app/actions/actions');
class Store
{
bindListeners(config : any) : void {;};
books : Array<types.IBook>;
selectedBookName : string;
...
}
export = flux.createStore<Store>(Store, 'Store');
, который используется в этой точке зрения:
"use strict";
import React = require('react');
import Store = require('app/stores/store'); // <-- here we import the Store
import _ = require('lodash');
import BookHelper = require('app/tools/bookHelper');
import Msg = require('app/tools/messages');
interface props {}
interface state {}
class NoteContainer extends React.Component<props, state>
{
state: typeof Store; // <-- this is Altjs<Store>, not Store :(
render()
{
if (!this.state.selectedBookName) // <-- here's an error
return;
...
, который дает это компилирует ошибка:
error TS2339: Property 'selectedBookName' does not exist on type 'AltStore<Store>'.
Как установить состояние зрения должно быть фактическим Магазин класс, а не AltStore<Store>
класс? I.e. как я могу получить тип общего параметра, например: state: typeof Store<THIS THING>
Я не уверен, что полностью понимаю ваш ответ, но я не вижу, как это работает. В строке 4 вы по-прежнему создаете свой тип statStype AltStore, но мне нужен доступ к типу внутри, самому хранилищу. – Richard
Тип хранилища на самом деле не существует во время выполнения, кроме как функция, называемая Store, когда она компилируется в JS, поэтому typeof Store просто возвращает строку «function», что не очень полезно. Если вы хотите добавить что-то вроде свойства класса в Store, вам нужно будет установить Store.prototype.someProperty = 'something' вне определения класса, а затем вы можете проверить Store.prototype.someProperty во время выполнения. – alexp